我正在尝试通过将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方案无效。
问题是我如何以及在何处可以在守则中发现此例外情况?
提前致谢,
答案 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。