我有一组基于WCF的测试工具客户端,用于一组Web服务。测试客户端允许我查看进出服务的原始请求和响应。 Message Inspector端点行为用于“选择”原始请求和响应消息,并将其保存以供稍后在UI中显示。
除了传递无效凭据的用例外,这种方法很有用。服务器返回HTTP 401以及包含所发生事件详细信息的SOAP错误。这在几个方面伤害了我:
MessageSecurityException
而不是FaultException
,因此我无法从错误中获取详细信息。AfterReceiveReply
事件处理程序触发,因此我无法访问原始响应。有什么方法可以处理这种情况,以便SOAP故障作为FaultException发生,并允许我的消息检查器处理响应,而不管返回的HTTP状态代码是什么?
谢谢!
答案 0 :(得分:2)
你做不到。如果在服务器端代码中 中发生.NET异常并且已被捕获,则只会获得FaultException
。
HTTP 401是“未经授权访问” - 在您访问服务器代码之前,您将获得该异常 - >这将始终是MessageSecurityException
- 永远不是FaultException
(并且无法将其神奇地转变为FaultException)。
在执行甚至到达服务器代码之前发生的任何异常(EndpointNotFoundException
或TimeoutException
之类的东西)绝不是错误异常。
但是,所有WCF特定异常都来自公共基类 - CommunicationException
。所以也许你可以把它作为后备来处理。