【问题标题】:Hosting ApiControllers on windows service在 Windows 服务上托管 ApiController
【发布时间】:2015-05-21 04:33:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net wcf rest service


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多