2011-03-10 205 views
2

我通过添加新项目 - > WCF服务库创建了一个WCF项目,当我在开发环境中运行它时,它打开了WCF测试客户端。如何在没有安装Visual Studio的服务器上安装此服务(我不想在IIS上托管它)。我应该写一个新的Windows服务?我可以在Windows服务中托管WCF服务吗?

回答

5

创建一个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

+0

任何原因'myServiceHost'是内部的而不是私人的? – ProfK 2015-01-24 09:50:33

+0

@ProfK号。再说一遍,我很久以前就写过这个答案,所以当时在给定完整背景下可能有一个理由。 – 2015-04-23 19:38:43

0

您需要创建一个Windows服务项目,然后将引用添加到您的WCF服务并承载它。为了安装该服务,您不需要visual studio,则需要使用installutil.exe

看一看here

0

查看TopShelf库。我用它来创建一些WCF服务。

提示:如果您打算编写更多的WCF服务,可能值得您一边阅读端口共享。