WCF服务跟踪显示UriFormatException

时间:2014-01-02 12:24:26

标签: c# wcf web-services soap ws-addressing

我正在尝试通过将SOAP请求传递给服务来创建将由其他方使用的WCF服务。客户端要求我处理在交互期间可能发生的一组FaultExceptions。

这包括如果客户端在SOAP请求[wsa:To]元素中发送格式错误的Uri,即客户端例如发送请求包含以下内容:

<wsa:To>http//:this.is.invalid/address</wsa:To>

我应该能够抛出一个特定的FaultException。我尝试实现IDispatchMessageInspector以在SOAP请求到达操作之前捕获它,但是当客户端发送请求包含一个坏Uri时,如上例所示,AfterReceiveRequest未被调用,因此我无法处理此类错误。

在我为WCF服务启用跟踪日志记录之前,我找不到错误,而且我是错误

  

System.UriFormatException,System,Version = 4.0.0.0,Culture = neutral,   PublicKeyToken = b77a5c561934e089 <br><br>with the description <br><br>处理异常。例外细节:   System.UriFormatException:无效的URI:URI方案无效。

问题是我如何以及在何处可以在守则中发现此例外情况?

提前致谢,

1 个答案:

答案 0 :(得分:0)

soap标头wsa:To应包含消息的预期接收者的地址。 WCF 客户端框架通过使用服务端点地址作为wsa:To标头元素的值来强制执行此操作。我不确定WCF 服务端框架是否强制验证此元素,因为它已经准备好接收了soap消息。

您看到400 HTTP错误,因为WCF 客户端正在尝试向无效的服务端点发送soap消息。要正确测试无效的wsa:To值,您需要使用无效wsa:To值创建soap XML但发送到正确的服务端点的代码。

如果WCF没有验证此值,那么您使用IDispatchMessageInspector的实现的方法应该有效。否则,如果WCF在调用IDispatchMessageInspector实现之前抛出异常,那么您可能需要实现IErrorHandler端点行为来捕获这种“在管道中”的异常。有关如何实施和配置它的信息,请参阅this great blog post