簡體   English   中英

在Windows服務上托管ApiControllers

[英]Hosting ApiControllers on windows service

我有一個REST API項目,其后有控制器和服務,它在IIS上運行良好。

現在,我試圖找到一種將其作為Windows服務托管在非IIS計算機上的方法。 到目前為止沒有運氣,TopShelf似乎是我想要的,但是我要托管多個控制器/服務,並且一次只能處理一個控制器/服務。

有沒有一種方法可以讓Windows Service項目運行另一個(引用的)項目並將其托管? 無需每次都進行服務的卸載安裝就可以更輕松地進行調試,因此理想情況下,項目應保持獨立。

您可以在Windows服務中托管WCF服務。 為此,創建一個Windows服務項目並引用WCF項目。還要在Windows服務項目中添加System.ServiceModelSystem.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM