我先问我的问题,然后我会解释原因。
如何指定我的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端点都会尝试绑定到同一个随机端口,导致系统无法启动。