2013-05-21 40 views
1

我在Windows 2008上使用MSMQ。消息在專用隊列中可用。我有一個WCF用戶(用C#編寫),它被安裝爲windows服務。現在的問題是,有時WCF用戶停止從隊列中選擇消息。如果我再次重新啓動服務,它工作正常。現在我附上IError處理程序記錄原因和異常。如何使窗口服務在出現錯誤時重新啓動

現在要處理這個問題我想要做的是,我將設置恢復屬性重新啓動服務在第一次失敗,現在的問題是如何拋出錯誤從HandleError()方法IErrorHandler class

請告訴我在窗口服務中引發異常的最佳方式,以便可以重新啓動。

+0

首先,你應該找出爲什麼服務停止選擇信息 - 這就是問題所在。也許你應該描述這種情況並詢問這個問題? –

+0

@TadasŠukys-我不知道爲什麼它突然停止從queue.still窗口服務正在運行,當我去停止窗口服務,然後它會引發錯誤,並從Windows日誌錯誤是:無法停止服務運行選擇消息。 System.ServiceModel.CommunicationObjectFaultedException:通信對象System.ServiceModel.ServiceHost不能用於通信,因爲它處於Faulted狀態。 at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout) at Microsoft.Samples.MSMQToWCF.SubscriberWindowsService.OnStop()in d:\ SubscriberWindowsService – samash

+0

@samash參見http://stackoverflow.com/questions/4197036/what -is最合適的路換一個窗口服務到不能倒 – stuartd

回答

0

據我所知,不能拋出異常來重新啓動Windows服務。

我通常封裝一個try catch(帶日誌記錄)以防止任何異常崩潰服務,這與您所建議的相反。

這可能是你可以捕獲錯誤並停止服務(不確定),並配置服務重新啓動,如果它停止?

1

雖然解決例外的根本原因可能更好,但在某些情況下,實施方法肯定有效。事實上,這種殺死已經以某種方式「有缺陷」的過程的能力對於fault tolerance的概念是至關重要的。

所以,做一個窗口服務自殺:

void KillSelf() 
{ 
    try 
    { 
     // Code to close open connections/dispose 
     // of unmanaged resources etc 
     ... 
    } 
    finally 
    { 
     Environment.Exit(1); 
    } 
} 

服務恢復選項應被設置爲自動重新啓動。這將確保您的服務重新恢復正常。

相關問題