代码之家  ›  专栏  ›  技术社区  ›  Graham Clark

wcf entlib验证-更改默认SOAP错误原因文本

  •  0
  • Graham Clark  · 技术社区  · 15 年前

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

    有什么方法可以更改文本吗“ 此错误的创建者未指定原因。 “为了更有用的东西,比如” 请参阅验证错误详细信息 “?

    <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 回复  |  直到 15 年前
        1
  •  3
  •   Graham Clark    15 年前

    恩,看来新自由党人没有想到这一点。我已经注意到需要在哪里修改entlib代码,并提出一个 issue at their CodePlex site . 我想这也可以由任何人作为 EntLibContrib 项目,但它们似乎仍然在企业库3.1上,而我使用的是4.1。

    我想如果有人不顾一切的话,解决方案就是下载entlib源代码,然后修改 BeforeCall 方法在 ValidationParameterInspector 类(在 Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF 命名空间)。这就是 FaultException 创建。此构造函数的重载可以指定 FaultReason .

        2
  •  0
  •   marc_s Anurag    15 年前

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

    当你看到 FaultException 在wcf中,有许多方法可以构造其中的一个-包括 constructors 它允许您为SOAP错误指定一个faultreason。

    马克