2013-10-03 64 views
0

我正在通過代碼配置一個REST WCF服務,並且有些事情是不正確的。我用下面的代碼創建一個錯誤處理程序。WCF 3.5添加IErrorHandler不會被調用

當我運行我們的服務(自託管)時,當我拋出帶有未經授權狀態碼的WebFaultException時,ProvideFault代碼被擊中。問題是客戶端(瀏覽器)獲取「服務器在處理請求時遇到錯誤,請參閱服務器日誌以獲取更多詳細信息。」 任何想法我失蹤?另外,因爲我自己託管,所以沒有「服務器日誌」,所以基本上我完全處於黑暗中。無論如何要捕捉自己託管的服務中的「服務器日誌」?

注:WebFaultException是我們使用3.5以來編寫的WebFaultException。

public class WebErrorHandler : IErrorHandler 
{ 
    private IErrorHandler m_chainedHandler; 

    public WebErrorHandler(IErrorHandler chainedHandler) 
    { 
     m_chainedHandler = chainedHandler; 
    } 

    #region IErrorHandler Members 

    public bool HandleError(Exception error) 
    { 
     return m_chainedHandler.HandleError(error); 
    } 

    public void ProvideFault(Exception error, System.ServiceModel.Channels.MessageVersion version, ref System.ServiceModel.Channels.Message fault) 
    { 
     WebFaultException ex = error as WebFaultException; 
     if (ex != null) 
     { 
      fault = Message.CreateMessage(version, ""); 
      HttpResponseMessageProperty p = new HttpResponseMessageProperty(); 
      p.StatusCode = ex.Status; 
      p.StatusDescription = "Another test"; 

      fault.Properties.Add(HttpResponseMessageProperty.Name, p); 
     } 
     else 
     { 
      m_chainedHandler.ProvideFault(error, version, ref fault); 
     } 
    } 

    #endregion 
} 

回答

0

如果你實際處理錯誤,你應該從句柄錯誤返回true。調用嵌套的處理程序可能會導致錯誤被拋出。 (如果鏈處理程序爲null,則鏈調用將導致NullReferenceException)。

+0

我改變了HandleError中的代碼,返回true,結果沒有任何變化。無論如何,我認爲HandleError會被調用。無論如何,這似乎是服務忽略了我在處理程序中創建的錯誤。 – bpeikes