C# 什么时候可以使用`IWebHost.Start()`方法?

C# 什么时候可以使用`IWebHost.Start()`方法?,c#,asp.net-core-mvc,asp.net-core-2.0,C#,Asp.net Core Mvc,Asp.net Core 2.0,ASP.NET核心2 MVC Microsift.AspNet.Hosting.IWebHost接口调用Start()方法。另外,Microsoft.AspNetCore.Hosting.WebHostExtensions为IWebHost接口的Run()扩展方法分类 Run()方法运行web应用程序并阻止调用线程,直到主机关闭 同时,Start()方法在主机关闭之前不会阻止调用线程。在这种情况下,浏览器在向用户显示信息之前关闭 嗯。。。当可以使用IWebHost.Start()方法时?并非所有

ASP.NET核心2 MVC

Microsift.AspNet.Hosting.IWebHost
接口调用
Start()
方法。另外,
Microsoft.AspNetCore.Hosting.WebHostExtensions
IWebHost
接口的
Run()
扩展方法分类

Run()
方法运行web应用程序并阻止调用线程,直到主机关闭

同时,
Start()
方法在主机关闭之前不会阻止调用线程。在这种情况下,浏览器在向用户显示信息之前关闭


嗯。。。当可以使用
IWebHost.Start()
方法时?

并非所有托管都是在传统的internet页面服务场景中执行的。例如,您可能希望提供WPF应用程序或Windows服务中的内容。在这种情况下,您可能不希望呼叫被阻止-您的应用程序将有其他事情要做。例如,假设您有一个WPF应用程序,并且您希望从中服务内容,您可以简单地扩展
main
方法:

private IWebHost _webHost;

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    //Create the host
    _webHost = WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();

    //We want to start, not run because we need the rest of the app to run
    _webHost.Start();

    //Run the app as normal
    Application.Run(new MainForm());

    //We're back from the app now, we can stop the host
    //...
}
private IWebHost\u webHost;
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//创建主机
_webHost=webHost.CreateDefaultBuilder(args)
.UseStartup()
.Build();
//我们想要启动,而不是运行,因为我们需要应用程序的其余部分来运行
_webHost.Start();
//正常运行应用程序
运行(新的MainForm());
//我们现在从应用程序返回,我们可以停止主机
//...
}

当您在运行测试套件的同一进程中测试web服务时,这非常有用

例如,您不必看微软的实现。在其构造函数中。这允许
IWebHost
在测试套件对其运行请求时在非阻塞线程上运行,并在测试套件完成时处理
TestServer


对于端到端测试,如果您的服务间接地从另一个服务获取请求,也可以显式地调用此函数。例如,我有一个从中推送消息的服务。因此,在我的测试套件中,我在我的服务的封装
IWebHost
上调用
Start()
,将消息发送到docker容器中运行,并调用我的测试主机。我验证测试主机是否按预期接收到请求,然后关闭测试主机。

并非所有托管都只为通过internet浏览站点的用户完成,例如,您可能希望在WPF应用程序中添加托管,这样调用
Start
可能更合适。@DavidG Ok,但在这种情况下,宿主的寿命仍然不到一秒钟。如何使用它?在WPF环境中,它会挂起。它在正常的
程序.cs中死亡的唯一原因是exe结束运行。在Windows应用程序(或可能是服务)中,
IWebHost
实例将一直保留到关机。@DavidG谢谢,现在我了解了。:)