【问题标题】:Why Kestrel doesn't listen at specified port?为什么 Kestrel 不在指定端口监听?
【发布时间】:2018-09-28 10:23:44
【问题描述】:

我正在尝试使用 kestrel 创建 Web 应用程序。在这篇文章https://docs.microsoft.com/pl-pl/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x 中有解释如何使用红隼(代码如下):

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .UseKestrel(options =>
    {
        options.Listen(IPAddress.Loopback, 5000);
    })
    .Build();

IIS 默认在 49950 端口启动,但在 5000 端口上没有任何监听。为什么它不起作用?我错过了什么吗?我想强制红隼仅从代码中监听 5000(不干扰其他项目文件)。此外,UseUrls 也是不可接受的,因为缺少 SSL 支持。我怎样才能做到这一点?

【问题讨论】:

  • 您是否从 Visual Studio 运行应用程序?您需要更改启动应用程序以进行调试。在说 IIS Express 的菜单栏中,单击它旁边的小下拉按钮并选择您的项目名称。这会将程序作为控制台应用程序运行并在您指定的端口上托管 Kestrel
  • 是的,这行得通 :) 谢谢!顺便说一句,为什么 IIS 启动不会在我指定的端口上启动红隼?这需要在某个地方进行更改吗?
  • 不确定缺少 SSL 支持是什么意思,Kestrel 2.x 确实支持 SSL 和节流(现在也可以用作面向 Internet 的应用程序 - 不建议使用 Kestrel 1.x做缺乏成熟的功能)

标签: c# asp.net-core kestrel-http-server


【解决方案1】:

Kestrel 是应用程序使用的端口。 IIS Express 用作一种反向代理。

如果要访问 kestrel 配置的端口,则必须将其作为控制台应用程序启动。单击开始按钮旁边的下拉按钮并选择YourCompany.YourApplication.Mvc(或您的项目名称)而不是“IIS Express”。然后单击开始,应用程序启动并出现一个控制台窗口。

保存它然后启动应用程序/调试。

如果您仍想使用 IIS-Express(因为您想将其托管在 IIS 上并希望对其进行更深入的体验),请转到项目属性,选择“调试”选项卡,选择“IIS Express”配置文件在下拉菜单中,然后更改“应用程序 URL”。这将使用新端口更新 launchSettings.json 文件和 IIS Express 配置 (.vs/config/applicationhost.config)。

我强烈建议不要手动编辑 launchSettings.json 文件,因为这可能会使 applicationhost.config 保持不变(这确实决定了端口,launchSettings.json 只是告诉 IDE 在浏览器中打开哪个 URL)。

如果由于任何原因您在 launchSettings.json / applicationhost.config 中的 url 不同步,您可以手动编辑 applicationhost.config 或直接删除它(.vs 文件夹通常是隐藏的,您可能需要显示隐藏首先在您的资源管理器中的文件夹),它将在下一次打开解决方案和/或运行应用程序时重新创建。

【讨论】:

  • 你说:“如果你想访问 Kestrel 配置的端口,你必须将它作为控制台应用程序启动。”你能解释一下它对应用程序设计的确切含义吗?你从哪里找到这些信息的?当您想在 Kestrel 上将应用程序作为 Windows 服务运行时会发生什么?它是否会因为没有从控制台运行而在特定端口上启动时出现问题?
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 2019-09-29
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 2019-03-30
相关资源
最近更新 更多