2013-07-24 42 views
0

我有一個NetNamedPipeBinding和一個bool isAlive()方法,我想用它來檢查ServiceHost是否還活着。檢查ServiceHost是否還活着

目前這看起來是這樣的:

while (!stopThread) 
     { 
      Thread.Sleep(1000); 
      try{ 
       try 
       { 
       pipeproxy.isAlive(); 
       } 
       catch (CommunicationObjectFaultedException) 
       { 
       pipeproxy = pipeFactory.CreateChannel(); 
       } 
      }     
      catch (EndpointNotFoundException) 
      { 

       //Show notification 
        stopThread=true; 
      } 
      catch{} 
     } 
    //Close Application 

令人驚訝我能創造一個通道,即使沒有主持人,所以我不知道這是否是正確的做法與否。

在此先感謝。

+1

只要'pipeFactory'中引用的服務可用,就可以從中創建新的通道。代理服務可能獨立於服務而出現故障。 – Tim

+0

那麼執行isAlive檢查的正確方法是什麼? –

+0

爲什麼你需要檢查它是否存在?在ServiceHost上註冊Faulted狀態。我假設它託管在託管應用程序中,請確保您的所有服務調用都是使用try/catch,並且不要拋出catch,發回錯誤合約。 – ilansch

回答

2

CreateChannel沒有連接到服務,只有當你調用它時纔會發生這種情況。