强制Kestrel到指定端口

时间:2018-06-03 07:04:11

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

我先问我的问题,然后我会解释原因。

如何指定我的Kestrel服务器不应该监听.Net核心模块告诉它的端口?

我有这个用.Net Core编写的web api应用程序,它正在使用一些微服务架构。最终的Web应用程序通过网络公开了一些API供客户端使用,但它必须在内部公开一些特殊的API以供微服务使用。

现在,我使用下面的代码在两个不同的端口上启动两个Kestrel服务,并指定两个不同的端口:

public static IWebHost BuildWebHost(string[] args, ServerSettings settings)
{
    return WebHost.CreateDefaultBuilder(args).UseKestrel(
        (options) => AttachEndPoints(options, settings.HttpBindingPort)).
        UseStartup<HttpStartup>().Build();
}

protected static void AttachEndPoints(KestrelServerOptions options, int? port)
{
    var ip = IPAddress.Any;
    options.Listen(ip, port ?? 80)
}

这可以很好地作为控制台应用程序运行,一切正常。但是,当我使用ASP.Net核心模块在IIS中启动应用程序时,ASP.Net核心模块的监听端口会覆盖我自己指定的端口,并且两个Http端点都会尝试绑定到同一个随机端口,导致系统无法启动。

0 个答案:

没有答案