在MVC5中,我有一个控制台应用程序,它将使用Microsoft.Owin.Hosting.WebApp.Start(...)来托管一堆控制器,这些控制器将从放置在外部文件夹中的程序集动态加载并对它们运行一些自定义初始化通过API调用 . 这样我就可以将参数传递给在运行时确定的初始化方法(并且不像维护配置文件那样笨重) .
在MVC6中,据我所知,自我托管是由DNX运行时使用Microsoft.AspNet.Hosting完成的,但这都是通过命令行完成的 . 有没有办法可以在C#控制台应用程序中自我托管,这样我就可以保留这种初始化架构?
2 回答
Katana的
WebApp
静态类已被WebHostBuilder
取代,它提供了一种更灵活的方法:https://github.com/aspnet/Hosting/blob/dev/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs .您在project.json(例如
Microsoft.AspNet.Hosting server=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:54540
)中注册新的Web命令并使用dnx
(例如dnx . web
)运行它时,托管块使用的组件是've probably already used this API without realizing it, as it':https://github.com/aspnet/Hosting/blob/dev/src/Microsoft.AspNet.Hosting/Program.cs
In ASP.NET 4.x 我们使用OWIN主机在控制台应用程序中自托管 . 我们直接运行
MyApp.exe
. 它的Main()
方法调用WebApp.Start()
来创建OWIN主机 . 我们使用IAppBuilder
的实例通过appBuilder.Use()
构建HTTP管道,并将其与appBuilder.Build()
链接在一起 . 这都在Microsoft.Owin.Hosting
名称空间内 .In ASP.NET Core rc2 我们使用
IWebHost
在控制台应用程序中自托管 . (虽然OWIN启发了它,但这不是OWIN主机 . )我们直接运行MyApp.exe
.Main()
方法创建一个新的WebHostBuilder()
,我们用它来通过webHostBuilder.Use()
构建HTTP管道,将它与webHostBuilder.Build()
链接在一起 . 这都在Microsoft.AspNet.Hosting
命名空间内 .关于Pinpoint的答案, in ASP.NET Core rc1 我们需要运行
dnx.exe
而不是直接运行我们的应用程序 .WebHostBuilder
的工作隐藏在dnx.exe
可执行文件中 .Dnx.exe
也启动了我们的应用程序 . 我们的应用程序的Main()
方法调用WebApplication.Run()
,之后我们使用IApplicationBuilder
的实例通过调用appBuilder.Use()
将中间件添加到HTTP管道 . 我们的应用程序和dnx.exe
共同负责创建/配置主机 . 它's convoluted and I am glad that this changed in rc2. I supposed that in rc1 the equivalent of OWIN' sWebApp.Start()
是WebApplication.Run()
.一些参考文献
http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api
https://msdn.microsoft.com/en-us/library/microsoft.owin.hosting.webapp%28v=vs.113%29.aspx