在Windows服务上托管ApiControllers

时间:2015-05-21 04:33:13

标签: c# .net wcf rest service

我有一个REST API项目,后面有控制器和服务,它在IIS上运行良好。

现在我正在尝试找到一种方法来将它作为Windows服务在非IIS计算机上托管。到目前为止没有运气,TopShelf似乎是我想要的,但我有多个控制器/服务来托管,而且它似乎一次只能处理一个。

有没有办法让Windows服务项目运行另一个(引用的)项目并托管它?在没有每次服务卸载安装的情况下调试更容易,因此理想情况下项目将保持独立。

1 个答案:

答案 0 :(得分:0)

您可以在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;
    }
}