1

我正在尝试通过将 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 方案无效。

问题是如何以及在哪里可以在代码中捕获此异常?

提前致谢,

4

1 回答 1

0

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

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

如果 WCF 不验证此值,则您是使用IDispatchMessageInspector应该工作的实现的方法。否则,如果 WCF 在调用实现之前抛出异常,IDispatchMessageInspector那么您可能需要实现IErrorHandler端点行为来捕获这种“管道中”异常。有关如何实现和配置它的信息,请参阅这篇精彩的博客文章。

于 2014-01-02T16:15:48.297 回答