2009-07-22 39 views
0

我正在爲我的WCF服務使用Enterprise Library Validation Application Block。一切都很好,.Net消費者可以捕獲FaultException<ValidationFault>異常,以獲得一系列人類可讀的業務錯誤。然而,對於非網絡消費者來說,這看起來並不是那麼好,特別是那些正在查看原始SOAP消息的人。 SOAP原因文本始終爲「此故障的創建者未指定原因」這不是很有幫助,因爲的一個原因,它在<Detail>元素下指定,如示例中所示故障消息下面。WCF EntLib驗證 - 更改默認的SOAP錯誤原因文本

有什麼辦法來改變文字「此故障的創建者未指定原因。」的東西更有益的,如「見ValidationFault詳細」?

<s:Body> 
    <s:Fault> 
     <s:Code> 
     <s:Value>s:Sender</s:Value> 
     </s:Code> 
     <s:Reason> 
     <s:Text xml:lang="en-GB">The creator of this fault did not specify a Reason.</s:Text> 
     </s:Reason> 
     <s:Detail> 
     <ValidationFault xmlns="http://www.microsoft.com/practices/EnterpriseLibrary/2007/01/wcf/validation" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <Details xmlns:b="http://schemas.datacontract.org/2004/07/Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF"> 
       <b:ValidationDetail> 
        <b:Key i:nil="true"/> 
        <b:Message>Value Validator</b:Message> 
        <b:Tag>request</b:Tag> 
       </b:ValidationDetail> 
      </Details> 
     </ValidationFault> 
     </s:Detail> 
    </s:Fault> 
</s:Body> 
+0

我有同樣的問題。我認爲沒有辦法使用WCF的企業庫驗證行爲來做到這一點。 – softveda 2009-07-22 11:45:24

+0

是啊,我在StackOverflow的日子之前調查了一下,這是我得出的結論,但我想我會在這裏發帖檢查! – 2009-07-22 12:04:10

回答

3

嗯,好像EntLib人們沒有想到這個。我已經注意到EntLib代碼需要更改的位置,並提出issue at their CodePlex site。我想這也可以由任何人完成,作爲EntLibContrib項目的一部分,但他們似乎仍然在企業庫3.1上,而我使用的是4.1。

我想如果有人絕望,解決方法是下載EntLib源代碼,並修改ValidationParameterInspector類中的BeforeCall方法(在Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF命名空間中)。這是創建FaultException的地方。該構造函數的重載可以指定FaultReason

0

WCF服務如何產生這些錯誤?

當您查看WCF中的FaultException類時,可以通過多種方法構建其中的一種 - 包括一些constructors,這些方法允許您爲SOAP錯誤指定FaultReason。

Marc

+0

是的,但EntLib驗證正在踢我的服務實施代碼之前。該服務可以處理驗證發生後發生的錯誤,並將它們包裝在SOAP Faults中,但驗證發生在所有這些之前。 – 2009-07-22 11:42:30