Отправка файлов cookie через WCF с использованием ChannelFactory - PullRequest
1 голос
/ 24 октября 2010

Я использую контейнер IOC, который предоставляет мне IService.В случае, когда IService является службой WCF, она предоставляется фабрикой каналов. Когда IService живет на той же машине, он может получить доступ к одним и тем же файлам cookie, и, таким образом, никаких проблем, однако после вызова службы WCF эти файлы cookie необходимо отправить.

Я потратил много времени, пытаясь найти способ отправки файлов cookie с использованием фабрики каналов, и единственный способ, с помощью которого я могу обнаружить, что это работает, заключается в следующем

var cookie = _authenticationClient.GetHttpCookie();
HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers.Add(HttpRequestHeader.Cookie, cookie.Name + "=" + cookie.Value);
using(var scope = new OperationContextScope((IClientChannel)_service))
{
   OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
   var result = _service.Add(details);
   if (result.Result == RPGResult.Success)
   {
       return RedirectToAction("Index", "Home", result.Id);
   }
}

Проблема сиспользуя этот метод, я должен знать, что я вызываю службу WCF, что не всегда так.Я пытался написать оболочку для ChannelFactory, которая открывает новую область операцииcontextscope при создании новой службы и различных других решений, но ничего не помогло.

У кого-нибудь есть опыт отправки файлов cookie через службы WCF?

Я нашел решение с использованием SilverLight, к сожалению, я не использую silverlight, решение здесь: http://greenicicleblog.com/2009/10/27/using-the-silverlight-httpclient-in-wcf-and-still-passing-cookies/ К сожалению, стандартный .net не содержит интерфейс IHttpCookieContainerManager

В идеале я быбыть в состоянии использовать что-то подобное, то есть я мог бы сказать фабрике каналов, чтобы она передавала куки-файлы всякий раз, когда они открывались.

Если у кого-то есть лучший способ передать токен, который используется для аутентификации, это тоже будет оценено.

1 Ответ

0 голосов
/ 24 октября 2010

У меня есть решение, в котором я создаю прокси-класс IService, а затем каждый раз, когда вызывается метод IService, он вызывает прокси-сервер, созданный фабрикой каналов, но сам вызов оборачивается в операцию-константную область точно так же, как у меня вмой вопрос.Я использовал прокси-фабрику по этой ссылке http://www.codeproject.com/KB/cs/dynamicproxy.aspx

...