2012-06-29 236 views
1

我在VS2010調試窗口服務有:調試停止Windows服務

static void Main() 
{ 
    #if (DEBUG) 
     var s1 = new Service1(); 
     s1.Start(); 
     Thread.Sleep(Timeout.Infinite); 
    #else 
     ServiceBase.Run(new ServiceBase[] 
      { 
       new Service1() 
      }); 
    #endif 
} 

這讓我在調試器中運行的服務。問題是,在開始時,服務會打開一個WCF通道,該通道似乎在我通過停止調試終止進程後綁定套接字。當我停止調試或服務停止時,如何關閉此套接字。我嘗試在服務析構函數中設置斷點,並嘗試使用OnStopOnShutdown方法,但不調用這些方法。

+0

你使用你的Windows服務來自我託管一個WCF Web服務,對嗎? – abatishchev

+0

我在Windows服務中託管WCF服務,是的。 – Echilon

+0

你使用什麼樣的綁定? – abatishchev

回答

1

據我所知,當你在Visual Studio中結束調試時,這個進程只會在不調用終結器的情況下被終止,甚至不會執行finally塊。

+0

什麼是模擬停止服務的最佳方式。我能看到的唯一方法是編譯,運行服務。然後附加調試器,然後停止服務,但這將非常繁瑣,試圖調試非常快。 – Echilon

+0

同意。您也可以將服務的代碼作爲獨立代碼進行測試和調試,而無需包裝到Windows服務中。這種分離可以讓你確保模型本身的工作。我通常創建一個控制檯應用程序調用服務使用的代碼,但不創建服務。 –

+0

慚愧,但謝謝你的回答。 – Echilon