[英]Hosting ApiControllers on windows service
我有一個REST API項目,其后有控制器和服務,它在IIS上運行良好。
現在,我試圖找到一種將其作為Windows服務托管在非IIS計算機上的方法。 到目前為止沒有運氣,TopShelf似乎是我想要的,但是我要托管多個控制器/服務,並且一次只能處理一個控制器/服務。
有沒有一種方法可以讓Windows Service項目運行另一個(引用的)項目並將其托管? 無需每次都進行服務的卸載安裝就可以更輕松地進行調試,因此理想情況下,項目應保持獨立。
您可以在Windows服務中托管WCF服務。 為此,創建一個Windows服務項目並引用WCF項目。還要在Windows服務項目中添加System.ServiceModel
和System.ServiceModel.Description
dll,然后編寫類似這樣的函數
private ServiceHost host;
private void HostWcfService()
{
//Create a URI to serve as the base address
Uri httpUrl = newUri("http://localhost:1256/MyService/Service");
//Create ServiceHost
host = newServiceHost(typeof(MyService.IService), httpUrl);
//Add a service endpoint
host.AddServiceEndpoint(typeof(MyService.IService), newWSHttpBinding(), "");
//Enable metadata exchange
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
//Start the Service
host.Open();
}
然后像這樣在On OnStart方法中調用HostWcfService()
protected override void OnStart(string[] args)
{
if (host != null)
{
host.Close();
}
HostWcfService();
}
並像這樣更新OnStop方法
protected override void OnStop()
{
if (host != null)
{
host.Close();
host = null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.