iis - 如何将 DotNet Core (v5.0) Web Api 发布到 IIS?

我做的第一件事是在 IIS 服务器上安装 .NET Core Hosting Bundle;我也停止并重新启动了 IIS;

我已经测试并且可以确认我的应用程序在 Krestel 上运行,但我正在努力让它在 IIS 中运行(进程内);

与 Krestel 一起跑步(好/通过):

  1. 在我的本地 PC 上,“发布”为依赖于框架的 MyAppFolder(此文件夹现在包含我的应用程序的所有已编译资产,包括 exec 和 dll 的)

  2. 将 MyAppFolder 移动到 IIS 服务器上的某处;

  3. 直接在命令行上运行可执行文件(MyWebApi.exe),我得到默认的Now Listening on:http://localhost:5000

如果我使用浏览器导航到端点 http://localhost:5000/MyResource/123 ,则此 GET 请求会产生所需的 json 结果;

使用 IIS 运行(错误/失败):

  1. 如上所述,已安装 NET Core Hosting Bundle,包括停止/启动 iis 服务器
  2. 创建了一个应用程序池(无托管代码)
  3. 在 IIS 管理器 (MyVirtualApp) 上创建了一个虚拟应用程序,它指向包含我的应用程序所有资产的文件夹(与 Krestel 一起使用的同一文件夹)

我认为应该是这样,但它不起作用?我错过了任何步骤吗?当我将浏览器指向我的资源 http://localhost/MyVirtualApp/MyResource/123 时,我得到一个 404!

附加信息:

//Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

文档说我不需要显式 UseIIS,因为 CreateDefaultBuilder 将使用 IIS 或 Krestel;

此外, dotnet --info 给出以下内容:

Host (useful for support):
  Version: 5.0.17
  Commit:  6a98414363

.NET SDKs installed:
  No SDKs were found.

.NET runtimes installed:
  Microsoft.AspNetCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

To install additional .NET runtimes or SDKs:
  https://aka.ms/dotnet-download

404 错误页面:(由 IIS 给出)

Detailed Error Information:
Module:         IIS Web Core
Notification:   MapRequestHandler
Handler:        StaticFile
Error Code: 0x80070002

此 IIS 错误似乎与路由有关,https://stackoverflow.com/questions/5677099/routing-http-error-404-0-0x80070002

回答1

事实证明,Visual Studio 中的“发布”向导生成的“目标文件夹”会生成一个父文件夹,其中包含我的应用程序的 exe 和 dll,以及名为 publish、ref、runtimes 的子子文件夹;

在 IIS 中,我将站点的物理路径配置为父文件夹级别,而它应该是发布文件夹! (我认为 MS 的团队没有理由在父文件夹中生成文件,并再次在发布文件夹中生成文件 - 为什么要加倍并让它变得混乱!)。

相似文章

随机推荐

最新文章