我可以在Windows服务中托管WCF服务吗?
问题描述:
我通过添加新项目 - > WCF服务库创建了一个WCF项目,当我在开发环境中运行它时,它打开了WCF测试客户端。如何在没有安装Visual Studio的服务器上安装此服务(我不想在IIS上托管它)。我应该写一个新的Windows服务?我可以在Windows服务中托管WCF服务吗?
答
创建一个Windows服务项目。
将您的WCF服务添加到此项目。
在主Windows服务类(默认为Service1.cs),添加一个成员:
internal static ServiceHost myServiceHost = null;
修改的OnStart()开始新的ServiceHost与WCF服务类型:
protected override void OnStart(string[] args)
{
if (myServiceHost != null)
{
myServiceHost.Close();
}
myServiceHost = new ServiceHost(typeof(MyService));
myServiceHost.Open();
}
修改调用OnStop():
protected override void OnStop()
{
if (myServiceHost != null)
{
myServiceHost.Close();
myServiceHost = null;
}
}
添加安装和部署项目(安装项目)到您的解决方案。将该项目的输出设置为Windows Service项目的主输出。在生成安装和部署项目时,应该会看到一个可用于安装该服务的Setup.exe文件。
请记住,您仍然需要设置您的端点和绑定。看看使用nettcpbinding进行此设置。
如果您在安装后启动Windows服务时遇到问题,请参考:Error 5 : Access Denied when starting windows service。
任何原因'myServiceHost'是内部的而不是私人的? – ProfK 2015-01-24 09:50:33
@ProfK号。再说一遍,我很久以前就写过这个答案,所以当时在给定完整背景下可能有一个理由。 – 2015-04-23 19:38:43