为什么Kestrel不会在指定端口收听?

时间:2018-04-18 08:52:05

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

我正在尝试使用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(不干扰其他项目文件)。由于缺少SSL支持,UseUrls也是不可接受的。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

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文件夹通常是隐藏的,你可能需要首先在资源管理器中显示隐藏文件夹),它将在解决方案的下一次打开和/或运行应用程序时重新创建。