WCF REST WebHttpBinding обработка файлов cookie - PullRequest
0 голосов
/ 22 марта 2011

Проблема в том, что клиент WCF не учитывает куки-файл сервера (не устанавливает его при следующем запросе). Вот как я создаю клиента:

WebChannelFactory<IPostService> factory = new WebChannelFactory<IPostService>(
    new WebHttpBinding() {AllowCookies = true},
    new Uri("http://10.6.90.45:8081"));

_proxy = factory.CreateChannel();

Настройки AllowCookies для false тоже не действуют.

На данный момент я написал простой IClientMessageInspector для сохранения cookie-файлов сервера между запросами, но я действительно не хочу этого делать, должен быть способ обработки cookie стандартным способом.

Используемый сейчас пользовательский инспектор, который работает, как и ожидалось, но я ищу «чистое» решение:

  public class CookieInspector : IClientMessageInspector
   {
      private string _cookie;

      public object BeforeSendRequest(ref Message request, IClientChannel channel)
      {
         if(_cookie != null && request.Properties.ContainsKey("httpRequest"))
         {
            HttpRequestMessageProperty httpRequest = request.Properties["httpRequest"] as HttpRequestMessageProperty;

            if(httpRequest != null)
            {
               httpRequest.Headers["Cookie"] = _cookie;
            }
         }

         return null;
      }

      public void AfterReceiveReply(ref Message reply, object correlationState)
      {
         if (reply.Properties.ContainsKey("httpResponse"))
         {
            HttpResponseMessageProperty httpResponse = reply.Properties["httpResponse"] as HttpResponseMessageProperty;

            if(httpResponse != null)
            {
               string cookie = httpResponse.Headers.Get("Set-Cookie");

               if (cookie != null) _cookie = cookie;
            }
         }
      }
   }

Ответы [ 2 ]

0 голосов
/ 09 мая 2013

Не знаю, было ли это «исправлено» в более поздней версии .NET (я на 4.5), или если у ОП были другие проблемы, которые мешали этому работать, но параметр allowCookies СЛЕДУЕТ работать для этой цели.

Это работает для меня .... У меня также есть "aspnetcompatabilitymode" на сервере.

  <webHttpBinding>
    <binding name="webHttpEndpointBinding" allowCookies="true">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows"/>
      </security>
    </binding>
  </webHttpBinding>
0 голосов
/ 23 марта 2011

Как добавить cookie на элемент HttpTransportBindingElement см. На этой странице есть полный ответ на ваш вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...