2009-01-10 131 views

回答

1

據我所知,故障狀態通常是WCF代理的終端。所以不,我不這麼認爲。

3

答案自己:)

你可以訂閱InnerChannel活動

  svc.InnerChannel.Closed += InnerChannel_Error; 
      svc.InnerChannel.Closing += InnerChannel_Error; 
      svc.InnerChannel.Faulted += InnerChannel_Error; 

然後處理異常並重新創建服務代理

private void InnerChannel_Error(object sender, EventArgs e) 
{ 
    var svc = _entrepotService as EntrepotServiceProxy; 
    try 
    { 
     if (svc != null) 
     { 
      if (svc.State != CommunicationState.Faulted) 
      { 
       svc.Close(); 
      } 
      else 
      { 
       svc.Abort(); 
      } 
     } 
    } 
    catch (CommunicationException) 
    { 
     if (svc != null) svc.Abort(); 
    } 
    catch (TimeoutException) 
    { 
     if (svc != null) svc.Abort(); 
    } 
    catch 
    { 
     if (svc != null) svc.Abort(); 
     throw; 
    } 
    _entrepotService = new EntrepotServiceProxy(); 
} 
+0

(只是爲了澄清),這是不完全保持連接斷開(正如Marc所說,故障狀態意味着(通常)連接關閉,這是在關閉事件中重新創建連接。 – Russell 2010-03-09 00:19:35