2010-10-24 5 views
1

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

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

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, которая открывает новый рабочий контекст, когда он создает новую услугу и различные другие решения, но ничего не сработало.

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

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

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

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

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^