[wcf] rest http header
От: Flem1234  
Дата: 27.10.15 10:46
Оценка:
Есть такая проблемка:

Сервер, который по урлам выдает двоичные данные по одному адресу и джейсон по другим адресам.
Всю работу с сервисом мы переписываем на WCF как rest сервис.
Проблема с тем, что сервер отдает важные дополнительные данные в http header'ах.

Как к ним получить доступ со стороны клиента?

Хотелось бы просто описать дополнительные поля в ДТО:

public class Data
{
    public Stream Data { get; set; }
    public string Header1 { get; set; }
}


Но что-то не могу понять, как заставить это работать.

С ув. Игорь
Re: [wcf] rest http header
От: _ichensky Европа https://github.com/ichensky
Дата: 27.10.15 12:51
Оценка:
Здравствуйте, Flem1234, Вы писали:


F>Как к ним получить доступ со стороны клиента?

Броузера, самописного .нет приложения?
Все зависит от возможностей фремверка с помощью которого сделанное клиентское приложение.
Re: [wcf] rest http header
От: Flem1234  
Дата: 27.10.15 15:59
Оценка: 8 (1)
Здравствуйте, Flem1234, Вы писали:

В общем, для своего WCF клиента решил так: для реализации IClientMessageFormatter, которую я использовал для десериализации ответов от сервера просто подменил сериализатор в методе DeserializeReply для определенных типов, которые передаются в виде двоичных данных тела http запроса.

Доступ к http headers сделал так:

private static WebHeaderCollection GetHttpHeaders(Message message)
{
     object httpResponseMessageObject;
     if (message.Properties.TryGetValue(HttpResponseMessageProperty.Name, out httpResponseMessageObject))
     {
       var httpResponseMessage = httpResponseMessageObject as HttpResponseMessageProperty;
       
       return (httpResponseMessage ?? new HttpResponseMessageProperty()).Headers;
     }

     return new WebHeaderCollection();
}
Re: [wcf] rest http header
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.10.15 13:43
Оценка: 1 (1)
Здравствуйте, Flem1234, Вы писали:
https://msdn.microsoft.com/ru-ru/library/system.servicemodel.messageheaderattribute(v=vs.110).aspx
и солнце б утром не вставало, когда бы не было меня
Re[2]: [wcf] rest http header
От: Flem1234  
Дата: 28.10.15 13:46
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Flem1234, Вы писали:

S>https://msdn.microsoft.com/ru-ru/library/system.servicemodel.messageheaderattribute(v=vs.110).aspx

Да, но насколько я понял это для SOAP хидеров, а не для http.
Re[3]: [wcf] rest http header
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.10.15 13:51
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, Flem1234, Вы писали:

S>>https://msdn.microsoft.com/ru-ru/library/system.servicemodel.messageheaderattribute(v=vs.110).aspx

F>Да, но насколько я понял это для SOAP хидеров, а не для http.

Да. Еще вариант использовать OperationContextScope
               using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
                {
                    var httpRequestProperty = new HttpRequestMessageProperty();
                    httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " +
                    Convert.ToBase64String(Encoding.UTF8.GetBytes(client.ClientCredentials.UserName.UserName + ":" +
                    client.ClientCredentials.UserName.Password));
                    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] =
                       httpRequestProperty;

                                            client.SetStatus("b46e97f8-3a80-4270-91ee-5aa45cd7a097", "Ид сообщения Вацап");


                  }


https://msdn.microsoft.com/ru-ru/library/system.servicemodel.operationcontext.outgoingmessageproperties(v=vs.110).aspx
https://msdn.microsoft.com/ru-ru/library/system.servicemodel.operationcontext.incomingmessageproperties(v=vs.110).aspx

https://msdn.microsoft.com/ru-ru/library/system.servicemodel.channels.messageproperties(v=vs.110).aspx
https://msdn.microsoft.com/ru-ru/library/system.servicemodel.channels.httprequestmessageproperty(v=vs.110).aspx

https://msdn.microsoft.com/ru-ru/library/system.servicemodel.channels.httpresponsemessageproperty(v=vs.110).aspx
и солнце б утром не вставало, когда бы не было меня
Отредактировано 28.10.2015 14:41 Serginio1 . Предыдущая версия . Еще …
Отредактировано 28.10.2015 14:38 Serginio1 . Предыдущая версия .
Отредактировано 28.10.2015 14:34 Serginio1 . Предыдущая версия .
Отредактировано 28.10.2015 13:55 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.