Обрабатывать исключение на IClientMessageInspector - PullRequest
0 голосов
/ 25 января 2019

У меня вызывается служба 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 голосов
/ 28 января 2019

Вы можете попробовать 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/

...