使用 Swagger UI 将 ASP.NET Core Web API 部署到托管其他几个网站的 Windows Server 2012 (IIS 8)

Deploy a ASP.NET Core Web API with Swagger UI to Windows Server 2012 (IIS 8) that hosts several other websites

我用 ASP.NET Core 2.2 开发了一个简单的 Web API,它有一个 Swagger UI(通过 Swashbuckle)。我在这里称它为 "my_api"。

我在 Windows 7 上使用 Visual Studio 2017 进行开发。

这个网络应用程序在我的本地主机上运行良好(当然)。

http://localhost:5000/swagger

这个URL会开招摇UI.

http://localhost:5000/api/[endpoints]

这些 URL 端点将从数据库中检索各种资源。


我想达到的效果(不知道可不可以):

我想将这个网络应用程序部署到 Windows Server 2012 运行ning IIS 8,它已经有其他三个相对静态的网站 运行ning。

我想将构建部署到此服务器上 "wwwroot" 中的文件夹 ("my_api_folder") 中。那么:

http://www.server-domain.com/my_api_folder/swagger

会开招摇UI.

http://www.server-domain.com/my_api_folder/api/[endpoints]

将调用我的各种 API 端点。


我做了什么:

我使用 VS 2017 构建(发布)Web 应用程序到一个文件夹。

我将其构建为自包含部署 (SCD),希望它更易于部署。

我使用的构建目标 (RID) 是 win-x64。

构建过程完成后,我在 .Net Core 生成的 "publish" 文件夹中有一个可执行文件 ("my_api.exe")、几个 dll 和其他 assets/config 文件。

我可以 运行 在我的本地机器上双击这个可执行文件。它会监听 localhost:5000 并且一切正常。

然后我将所有构建文件部署(复制并粘贴)到服务器上的 "my_api_folder" 文件夹中。


我现在面临的问题:

部署后,两者

http://www.server-domain.com/my_api_folder/swagger

http://www.server-domain.com/my_api_folder/api/[endpoints]

将 return 500 内部服务器错误。

然后我尝试双击服务器上的可执行文件,它会 运行。 (它显示在 localhost:5000 上收听)。

但是,我无法在服务器上打开 http://localhost:5000/swagger (or http://127.0.0.1:5000/swagger),也无法调用 API。 (在服务器的 IE 浏览器上找不到 404。)

我也无法从服务器外部访问这些路由。但是这次挂了很久,最后显示网关没有响应。

但是

netstat -a -o -n

显示 "my_api.exe" 确实在监听端口 5000,在我 运行 手动执行可执行文件后。


我的描述可能无处不在。我觉得我缺少一些关键知识来使这项工作在这里进行。

请指教我应该如何调试它?

可能是什么原因?

如果您需要任何其他信息,也请告诉我。

谢谢。

我觉得大家可以按照这个文档,因地制宜: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1