【问题标题】:How can I get WCF FaultException when server returns an HTTP 401?服务器返回 HTTP 401 时如何获取 WCF FaultException?
【发布时间】:2011-01-03 21:46:40
【问题描述】:

我有一个用于一组 Web 服务的基于 WCF 的测试工具客户端。测试客户端允许我查看进出服务的原始请求和响应。 Message Inspector 端点行为用于“挑选”原始请求和响应消息并保存它们以供以后在 UI 中显示。

这很好用,除了传递无效凭据的用例。服务器返回 HTTP 401 以及包含所发生情况的详细信息的 SOAP 错误。这在几个方面伤害了我:

  1. 在客户端上显示为 MessageSecurityException 而不是 FaultException,因此我无法从故障中获取详细信息。
  2. 此异常似乎阻止了我的消息检查器上的 AfterReceiveReply 事件处理程序触发,因此我无法访问原始响应。

我有什么办法可以处理这种情况,以便 SOAP 错误以 FaultException 的形式出现,并允许我的消息检查器处理响应,而不管返回的 HTTP 状态代码如何?

谢谢!

【问题讨论】:

  • 您在服务器端使用什么类型的身份验证?客户端如何传递凭据?
  • 服务器端的基本身份验证。通过手动创建 HTTP 标头来传递凭据 ==> forums.silverlight.net/forums/t/18729.aspx

标签: c# asp.net wcf wcf-client


【解决方案1】:

你不能。只有在服务器端代码中发生 .NET 异常并且已被捕获时,您才会收到 FaultException

HTTP 401 是“未经授权的访问”——在你到达服务器代码之前你会得到那个异常——>这将永远是一个MessageSecurityException——从来不是一个FaultException(而且没有办法神奇地转向也就是一个 FaultException)。

在执行甚至到达服务器代码之前发生的任何异常(例如EndpointNotFoundExceptionTimeoutException)绝不是错误异常。

但是,所有 WCF 特定异常都源自一个公共基类 - CommunicationException。因此,也许您可​​以将其作为后备处理。

【讨论】:

  • 感谢您的回复。更多细节......如果您使用soapUI 或类似工具查看原始响应,该服务会返回401 以及SOAP 错误。所以,信息就在那里,我只是无法得到它,因为我的消息检查器永远不会因为 MessageSecurityException 而触发。还有其他方法可以得到原始响应吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多