我正在使用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>
答案 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。
马克