WCF EntLib验证 - 更改默认的SOAP故障原因文本(WCF EntLib Validati

2019-09-20 03:57发布

我使用的企业库验证应用程序块我的WCF服务。 一切都很好,和.Net消费者可以抓住FaultException<ValidationFault>例外获得人类可读的业务错误的集合。 但是,它看起来不为non-.Net消费者很大的,尤其是那些将要寻找在原始SOAP消息。 肥皂原因文本始终是“ 此故障的创建者未指定原因。”这是不是非常有帮助,因为有原因的,它是根据指定的<Detail>元素,如下面的例子故障信息。

有没有什么办法来改变文字“ 此故障的创建者未指定原因。”喜欢的东西“ 请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>

Answer 1:

嗯,好像EntLib人没想到这一个的。 我注意到其中的EntLib代码的变化必须与提出的在他们的CodePlex网站的问题 。 我想这也可以被任何人做的一部分EntLibContrib项目,但他们似乎仍然对企业库3.1,而我使用的是4.1。

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



Answer 2:

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

当你看的FaultException在WCF类,有很多方法可以构造其中的一个-包括一些构造函数允许您指定SOAP错误FaultReason。



文章来源: WCF EntLib Validation - change default SOAP Fault Reason text
标签: wcf soapfault