2011-03-10 199 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服務,可能值得您一邊閱讀端口共享。