Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core IWebHostBuilder.PreferHostingUrls的用途是什么_Asp.net Core_Kestrel Http Server_.net 5_Microsoft.extensions.hosting - Fatal编程技术网

Asp.net core IWebHostBuilder.PreferHostingUrls的用途是什么

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

我知道说了什么,但我不知道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,例如使用或

然后,使用
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端口:

参考: