WCF EntLib验证 - 更改默认的SOAP Fault Reason文本

时间:2009-07-22 11:21:27

标签: wcf soapfault

我正在使用Enterprise Library Validation Application Block作为我的WCF服务。一切都很好,.Net消费者可以捕获FaultException<ValidationFault>异常以获取人类可读的业务错误集合。但是,对于非Net用户来说,它看起来并不那么好,尤其是那些将要查看原始SOAP消息的消费者。 SOAP Reason文本始终是“此错误的创建者未指定原因。”这不是很有用,因为的一个原因,它是在<Detail>元素,如下面的示例故障消息所示。

有没有办法更改文本“此错误的创建者未指定原因。”更有用的内容,例如“请参阅ValidationFault详细信息”?< / p>

<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>

2 个答案:

答案 0 :(得分:3)

好吧,似乎EntLib人没有想到这个。我已经注意到EntLib代码中的更改需要在哪里并且引发issue at their CodePlex site。我想这也可以作为EntLibContrib项目的一部分由任何人完成,但它们似乎仍然在Enterprise Library 3.1上,而我正在使用4.1。

我想如果有人绝望,解决方法是下载EntLib源代码,并修改BeforeCall类中的ValidationParameterInspector方法(在Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF命名空间中)。这是创建FaultException的地方。此构造函数的重载可以指定FaultReason

答案 1 :(得分:0)

您的WCF服务如何产生这些错误?

当您查看WCF中的FaultException类时,有许多方法可以构建其中一个 - 包括一些允许您为SOAP错误指定FaultReason的constructors

马克