#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) на исключение, и вы можете получить содержимое из его потока.