处理IClientMessageInspector

时间:2019-01-25 08:29:59

标签: wcf exception-handling iclientmessageinspector

我已经调用了wcf服务,并且实现了IClientMessageInspector接口。

我想处理AfterReceiveReply上的错误。故障异常应始终返回200状态代码以及自定义消息和错误代码。它不应在服务调用上引发任何异常。

public void AfterReceiveReply(ref Message reply, object correlationState)
        {
            if (reply.IsFault)
            {
                // wrap message with http status code 200 and return content as exception model like status code, exception message;
            }
        }

我想处理异常,它总是返回响应,而不会在客户代码中处理任何异常。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以尝试HttpResponseMessageProperty,它包含返回的Message的状态代码。

 if (reply.IsFault)
        {
            if (reply.Properties.ContainsKey(HttpResponseMessageProperty.Name))
            {
                HttpResponseMessageProperty pro = reply.Properties[HttpResponseMessageProperty.Name] as HttpResponseMessageProperty;
                pro.StatusCode = System.Net.HttpStatusCode.OK;

            }
            else
            {
                reply.Properties.Add(HttpResponseMessageProperty.Name, new HttpResponseMessageProperty { StatusCode = System.Net.HttpStatusCode.OK });
            }
        }

但是消息已由服务器返回,如果服务器引发异常,则可能无法在AfterReceiveReply方法中接收消息。

如果这不起作用,建议您可以在发送响应之前使用服务器端的IDispatchMessageInspector更改状态代码。 (如果您可以控制服务器端) http://mark.mymonster.nl/2011/02/10/make-use-of-wcf-faultcontracts-in-silverlight-clients/