当服务器返回HTTP 401时,如何获取WCF FaultException?

时间:2010-01-11 19:49:46

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

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

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

  1. 在客户端上显示为MessageSecurityException而不是FaultException,因此我无法从错误中获取详细信息。
  2. 此异常似乎阻止我的消息检查器上的AfterReceiveReply事件处理程序触发,因此我无法访问原始响应。
  3. 有什么方法可以处理这种情况,以便SOAP故障作为FaultException发生,并允许我的消息检查器处理响应,而不管返回的HTTP状态代码是什么?

    谢谢!

1 个答案:

答案 0 :(得分:2)

你做不到。如果在服务器端代码中 中发生.NET异常并且已被捕获,则只会获得FaultException

HTTP 401是“未经授权访问” - 在您访问服务器代码之前,您将获得该异常 - >这将始终是MessageSecurityException - 永远不是FaultException(并且无法将其神奇地转变为FaultException)。

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

但是,所有WCF特定异常都来自公共基类 - CommunicationException。所以也许你可以把它作为后备来处理。