Клиент WCF, использующий несколько asmx-сервисов, которые используют HTTP-куки
Я пытаюсь использовать один и тот же файл cookie http (фактически asmx sessionid) в нескольких конечных точках клиента WCF.
Сервер имеет несколько конечных точек, одна из которых:
AuthenticationService.asmx
Login () <- Создает HTTP-cookie, который является сервером ASP.NET sessionid
Выйти () <- Удаляет те же куки
SomeOtherService.asmx
DoSomeThing () <- восстанавливает действительный файл cookie из AuthenticationService.asmx.
Как я могу поделиться куки HTTP через несколько конечных точек.
У меня нет контроля над кодом сервера, и я должен использовать WCF.
3 ответа
Посмотрите на эту статью.
В нем объясняется, как вручную управлять файлами cookie в прокси-клиенте WCF. Точнее, WCF предоставляет API, который позволяет извлекать куки-файлы из ответа HTTP, и таким же образом вручную устанавливать куки-файл для HTTP-запроса.
Вам нужно будет использовать этот механизм для извлечения файла cookie из ответа HTTP, полученного данным клиентским прокси-сервером, и назначить этот же файл cookie для запроса HTTP, отправленного другим клиентским прокси-сервером другой службе.
В этой теме на форумах MSDN объясняется, как это сделать для каждого вызова службы в приложении с помощью инспекторов сообщений WCF.
ОБНОВИТЬ:
Я написал сообщение в блоге о том, как решить эту проблему. Вы можете прочитать это здесь.
Я просто столкнулся с той же проблемой. Если клиент WCF общается только с одной службой ASP.NET, то это легко. Просто установите для свойства AllowCookies в BasicHttpBinding значение true, и прокси-сервер службы автоматически обработает файл cookie идентификатора сеанса ASP.NET.
Но у меня такая же ситуация, как у вас, когда есть 2 службы ASP.NET, с которыми мне нужен мой клиент WCF. Первый из них выдает файл cookie идентификатора сеанса ASP.NET, и мне нужно иметь возможность передавать этот файл cookie в вызовах ко второму сервису. Кто-нибудь знает как это сделать?
Если вы включили режим совместимости asp.net, вы можете получить доступ к сеансу http из своей службы WCF, поэтому вам не нужно добавлять файлы cookie для этого.