0

我调用了 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;
            }
        }

我想处理异常,它总是返回响应,没有我将在客户代码中处理的任何异常。

谢谢

4

1 回答 1

0

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

 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/

于 2019-01-28T07:35:04.067 回答