2009-04-15 50 views
1

我介紹了在我們的WCF服務中使用FaultException。調試WCF異常導致CommunicationException

爲了測試這是我在服務器上創建以下功能:

public void ThrowException() 
    { 
     try 
     { 
      throw new ApplicationException("This is a test exception"); 
     } 
     catch (ApplicationException ex) 
     { 
      throw new FaultException<ApplicationException>(ex, "Test reason"); 

     } 
    } 

跳過領先一步。如果我運行它,它工作正常。但是,如果我使用調試器(VS2008)並允許代碼在catch塊中斷開(通過在異常上啓用中斷或對其進行加載),我的客戶端會生成一個CommunicationException。

調查這我發現這個論壇的帖子: http://social.msdn.microsoft.com/forums/en-US/wcf/thread/d1ae669f-9a62-4628-86c1-c15ff4068843/

問:爲什麼我看到這種行爲,調試,只有當(我假設別人是不是)?我怎樣才能避免這種行爲?

+0

爲了清楚起見,我的代碼沒有查看Exception.Data,我確保它不在監視窗口中,並關閉了Watch,Auto和Locals窗口。 – MattH 2009-04-15 16:49:56

回答

1

我不會稱這是一個修復/解決方案,但我有一個解決方案非常適合我的情況。

正如我所說我剛剛開始WCF異常處理,並且我意識到IErrorHandler是處理我的異常,而不是方法級別try/catch的更好方法。

當調試器跳過ProvideFault的實現時,調試器不查看異常,因此它不會導致CommunicationException。

這可以工作,但我仍然想要一個真正的解決方案,因爲有些情況下我想提供特定的異常,這些異常會在ProvideFault中保持不變。