Asp.Net WebAPI生成的是一個程序集,並不是獨立的進程,因此,要運行的時候必須將其承載在相應的宿主上,一般比較常見的是IIS承載。很多時候,我們為了簡化部署或者功能集成,需要將其承載到獨立的進程上,這種方式一般稱之為Self-Host,本文就簡單的介紹一下WebAPI的SefHost方法。
首先在Nuget上安裝Microsoft.AspNet.WebApi.SelfHost庫。
附上我們的WebAPI控制器
public class ValuesController : ApiController
{
public IEnumerable<string> Get()
{
return new string[] { "111", "222" };
}
}
接下來的工作就是啟動我們的服務器了。
class Program
{
static void Main(string[] args)
{
//Assembly.Load("WebApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); //加載外部程序集
var config = new HttpSelfHostConfiguration("http://localhost:8080");
config.Routes.MapHttpRoute(
"API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });
using (var server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
}
}
}
從上面的代碼可以看出,配置文件和Asp.Net程序中基本上是一樣的,如果是直接用Asp.Net項目中生成的DLL的話,我們也可以直接用其WebApiConfig.Register的方法來進行配置的(需要像第一行注掉的那樣使用Assembly.Load加載程序集)。下面一段就是啟動服務器了,也沒有太多好介紹啊的。更多內容可以參看MSDN文檔:http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api
值得一提的是,SelfHost是在一個獨立進程中啟動了Http服務,也可以是說,它是一個mini版的Http服務器,我之前介紹過通過HttpListener實現簡單的Http服務,到了現在,用WebAPI的SelfHost方式是可以更加快捷的實現擴展性更好的Mini Http服務器的,當我們需要一個簡單的Http服務的時候,可以使用這種方式。
除了這種方式外,微軟更加推薦用功能更加強大的OWIN來承載WebAPI服務,由於目前對OWIN還沒有怎么研究過,后續有時間再介紹一下它。
另外,除了IIS、SelfHost等方式外,雲時代發布到Windows Azure也是非常便捷的,這里就不做多少介紹了,詳細內容請參看MSDN文檔:http://www.asp.net/web-api/overview/hosting-aspnet-web-api 。