2011-02-25 67 views
9

我們已爲服務獲取REST和SOAP端點,因此我們使用WebFaultException傳遞友好消息。對於REST調用來說,這非常適用於SOAP調用。下面是清楚地顯示「細節」元素中的友好信息的軌跡。但是,在客戶端上引發的FaultException在消息中具有http狀態碼描述 - 而不是從服務拋出的真實消息。有什麼方法可以在客戶端上顯示預期的消息嗎?WCF故障異常未在客戶端上顯示肥皂服務的詳細信息

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header></s:Header> 
    <s:Body> 
     <s:Fault> 
     <faultcode xmlns:a="http://schemas.microsoft.com/2009/WebFault" xmlns="">a:BadRequest</faultcode> 
     <faultstring xml:lang="en-US" xmlns="">Bad Request</faultstring> 
     <detail xmlns=""> 
      <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Country code must be 3 characters.</string> 
     </detail> 
     </s:Fault> 
    </s:Body> 
</s:Envelope> 

此外,這是在.net 4.0中,我們正在使用Castle的WCF工具(DefaultServiceModel和RestServiceModel)。

+0

你是什麼意思的「表面」?你想在客戶端發生什麼? – 2011-02-25 20:06:02

回答

11

WCF將 - 默認情況下和設計 - 出於安全原因不報告詳細的錯誤信息。它基本上只會告訴你「服務器出了問題 - 運氣不好」。

您可以 - 爲了開發和測試目的 - 啓用更詳細的錯誤信息,但您應該關閉生產。

要啓用,使用服務器上的一個服務行爲:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="DetailedDebugging"> 
      <serviceDebug includeExceptionDetailInFaults="True" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <services> 
     <service name="YourService" 
       behaviorConfiguration="DetailedDebugging" > 
      .... 
     </service> 
    </services> 
</system.serviceModel> 

現在你的服務應該彙報詳細的SOAP故障,包括所有的細節,所有的方式回到您的客戶端應用程序。

更新:如果我沒有記錯,處理標準時(非類型化)FaultException,你有像FaultCodeFaultReason等容易獲得的東西,但消息細節有點麻煩得到它 - 嘗試這樣的事情:

try 
{ 
    // your service call here 
} 
catch(FaultException fe) 
{ 
    FaultCode fc = fe.Code; 
    FaultReason fr = fe.Reason; 

    MessageFault mf = fe.CreateMessageFault(); 
    if(mf.HasDetail) 
    { 
     string detailedMessage = mf.GetDetail<string>(); 
    } 
} 

這是否允許您訪問您的SOAP錯誤的詳細說明?

+1

這不是什麼,我已經試過,爲了調試目的。 WebFaultException和FaultException的全部要點是返回自定義消息。這就是WCF傢伙把它放在那裏的原因。 – Michael 2011-02-25 19:48:29

+0

@Michael:你如何捕獲並處理'FaultException'?看到我的更新... – 2011-02-25 20:00:07

+0

@邁克爾:自定義消息並不意味着自定義異常。 – 2011-02-25 20:04:20