我有一个REST API项目,后面有控制器和服务,它在IIS上运行良好。
现在我正在尝试找到一种方法来将它作为Windows服务在非IIS计算机上托管。到目前为止没有运气,TopShelf似乎是我想要的,但我有多个控制器/服务来托管,而且它似乎一次只能处理一个。
有没有办法让Windows服务项目运行另一个(引用的)项目并托管它?在没有每次服务卸载安装的情况下调试更容易,因此理想情况下项目将保持独立。
答案 0 :(得分:0)
您可以在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;
}
}