Получить ответ WCF Rest в клиенте

#wcf #rest

#wcf #rest

Вопрос:

Я использую WebChannelFactory<> для создания канала и взаимодействия со службой WCF REST.

При возникновении ошибки я хочу получить ответ из канала, чтобы прочитать сообщение об ошибке из тела ответа. Но я не могу понять, как получить поток ответов.

Вот мой код:

 using (var cf = new WebChannelFactory<T>(new Uri(url)))
{
    var channel = cf.CreateChannel();

    using (new OperationContextScope(channel as IContextChannel))
    {
        WebOperationContext.Current.OutgoingRequest.Headers
        .Add("x-st-authtoken", HttpUtility.UrlDecode(Constants.General_AuthorizedToken));

        WebOperationContext.Current.OutgoingRequest.Headers
        .Add("x-st-tesskey", HttpUtility.UrlDecode(Constants.General_SessionKey));
        try
        {
            a(channel);
        }
        catch (Exception ex)
        {
            throw new Exception("Status: "   ((int)WebOperationContext.Current.IncomingResponse.StatusCode).ToString());
        }
    }
}
  

В оператор catch я хочу включить данные из тела ответа…

Это кажется очевидным, но, похоже, я не могу найти какую-либо информацию в Интернете или что-либо еще.

Ответ №1:

Есть ли у вас какая-либо конкретная причина использовать ChannelFactory для взаимодействия со службой REST. Я думаю, что проще использовать объект HttpWebRequest для вызова службы REST, и там вы можете получить поток ответа при возникновении ошибки на сервере.

Также ознакомьтесь с RestSharp API, с помощью которого вы можете выполнить свою задачу по чтению потока ответов.

Ответ №2:

Я полагаю, что это вызовет исключение WebException.

итак, если вы явно перехватываете этот тип, вы можете использовать исключение WebException.Свойство ответа (которое является HttpWebReponse) на исключение, и вы можете получить содержимое из его потока.