【问题标题】: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.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;
}
}