【问题标题】:Where does Kestrel look for what ports to listen to?Kestrel 在哪里寻找要监听的端口?
【发布时间】:2018-07-27 09:52:56
【问题描述】:

我有几个 .NET Core 应用程序,当我运行 dotnet run 时决定监听不同的端口(一个到 5000,一个到 5000 和 5001)。

我一直在寻找一些关于这些决定是如何做出的全面文档,但找不到我想要的。

Kestrel 按优先顺序查找此设置的详尽位置列表是什么?

为简单起见,假设我使用默认的WebHostBuilder

public class Program
{
    public static void Main(string[] args)
    {
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build()
            .Run();
    }
}

【问题讨论】:

  • 澄清一下:我不是寻找如何用不同的选择覆盖此设置。我知道有几种方法可以做到这一点(CLI args、env 变量等)。我想了解所有做出此决定的方式,以加深我的理解。
  • 最好的检查位置是 GitHub 上的源代码
  • @Nkosi:是的,我已经尝试在那里寻找它,但我还没有了解代码库(甚至 .NET Core 的所有部分的 org/repo 结构) ...) 足够好,但能够找到我正在寻找的东西。
  • 有机会我会去看看的。显示一个简单的启动代码示例供您参考。

标签: asp.net-core-2.0 kestrel-http-server


【解决方案1】:

根据Endpoint configuration下的文档

默认情况下,ASP.NET Core 绑定到:

  • http://localhost:5000
  • https://localhost:5001(当有本地开发证书时)

...

源码也支持这个

/// <summary>
/// The endpoint Kestrel will bind to if nothing else is specified.
/// </summary>
public static readonly string DefaultServerAddress = "http://localhost:5000";

/// <summary>
/// The endpoint Kestrel will bind to if nothing else is specified and a default certificate is available.
/// </summary>
public static readonly string DefaultServerHttpsAddress = "https://localhost:5001";

内部AddressBinder使用它来设置主机和端口在没有提供时默认使用。

【讨论】:

  • 很好,谢谢!但是,这只是部分回答了我的问题。我有几个 api 应用程序(分布式应用程序中的服务),它们的设置代码与 OP 中的相同,但一个监听端口 5000,一个监听端口 5001,两者都在 HTTP 上。我想了解它们为何不同。
猜你喜欢
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
相关资源
最近更新 更多