Asp.net core IWebHostBuilder.PreferHostingUrls的用途是什么
我知道说了什么,但我不知道IServer是从哪里引入的,也不知道它是如何配置的 我的具体情况是,我正在调用IHostBuilder.ConfigureWebHost(不是ConfigureWebHostDefaults),我可以确定它不会自动包括Kestrel。我通过UseHttpSys而不是Kestrel使用HttpSys 当我同时运行两个本地开发网站时,我遇到了一个问题。尽管lauchSettings文件的每个端口都不同,但它们都注册了端口5000。当然,第二个站点收到一个错误,表明5000已经在使用中。经过反复研究,我发现端口5000是所有东西的默认值,不仅仅是红隼。(我真的相信在5.0之前,只有Kestrel默认设置为5000。)我通过在代码中显式设置URL证明了默认设置,这是值得的,5000没有被访问。然后我删除了代码并设置了“URL”:http://localhost:6000“在appSettings文件中,它被授予了荣誉。此时,我尝试将true和false作为PreferHostingUrls的参数,它们都使用appSettings文件中配置的url,并且在appSettings或代码中没有显式url的情况下都失败了 因此,问题的一部分变成了什么是IServer,以及它是如何引入和配置的。和包含该方法的,都是以分号分隔的IP地址或主机地址列表,其中包含服务器应侦听请求的端口和协议。通过使用此方法,我们可以设置服务器应侦听请求的URL 此外,当我们将Asp.net核心应用程序配置为使用服务器(例如Http.sys或Kestrel)时,在服务器选项中,我们还可以设置服务器应侦听请求的URL,例如使用或 然后,使用Asp.net core IWebHostBuilder.PreferHostingUrls的用途是什么,asp.net-core,kestrel-http-server,.net-5,microsoft.extensions.hosting,Asp.net Core,Kestrel Http Server,.net 5,Microsoft.extensions.hosting,我知道说了什么,但我不知道IServer是从哪里引入的,也不知道它是如何配置的 我的具体情况是,我正在调用IHostBuilder.ConfigureWebHost(不是ConfigureWebHostDefaults),我可以确定它不会自动包括Kestrel。我通过UseHttpSys而不是Kestrel使用HttpSys 当我同时运行两个本地开发网站时,我遇到了一个问题。尽管lauchSettings文件的每个端口都不同,但它们都注册了端口5000。当然,第二个站点收到一个错误,表明5000
PreferHostingUrls
属性,我们可以指示主机应该侦听IWebHostBuilder上配置的URL还是IServer上配置的URL
示例代码如下:
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hostsettings.json", optional: true)
.AddCommandLine(args)
.Build();
return WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000")
.UseConfiguration(config)
.UseHttpSys(serveroptions =>
{
serveroptions.Authentication.Schemes = Microsoft.AspNetCore.Server.HttpSys.AuthenticationSchemes.None;
serveroptions.Authentication.AllowAnonymous = true;
serveroptions.MaxConnections = 100;
serveroptions.MaxRequestBodySize = 30000000;
serveroptions.UrlPrefixes.Add("http://localhost:5001");
})
//.ConfigureKestrel(serverOptions =>
//{
// serverOptions.Limits.MaxConcurrentConnections = 100;
// serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
// serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
// serverOptions.Limits.MinRequestBodyDataRate =
// new MinDataRate(bytesPerSecond: 100,
// gracePeriod: TimeSpan.FromSeconds(10));
// serverOptions.Limits.MinResponseDataRate =
// new MinDataRate(bytesPerSecond: 100,
// gracePeriod: TimeSpan.FromSeconds(10));
// serverOptions.Listen(IPAddress.Loopback, 5001);
// serverOptions.Limits.KeepAliveTimeout =
// TimeSpan.FromMinutes(2);
// serverOptions.Limits.RequestHeadersTimeout =
// TimeSpan.FromMinutes(1);
//})
.PreferHostingUrls(false)
.Configure(app =>
{
app.Run(context =>
context.Response.WriteAsync("Hello, World!"));
});
}
如果PreferHostingUrls
为false
,它将侦听5001端口:
如果PreferHostingUrls
为true
,它将侦听5000端口:
参考: