У меня есть служба WCF, настроенная на использование состояния сеанса ASP.NET. Я тестировал эту службу WCF с клиентом WPF, и состояние сеанса поддерживается в разных веб-запросах.Доля Идентификатор сеанса ASP.NET между WCF и клиентом Http Silverlight
Теперь я пытаюсь использовать эту же службу WCF из приложения Silverlight, которое использует новый стек Http, не зависящий от браузера. Мне нужно использовать этот стек, чтобы понять наши ошибки службы WCF. Моя проблема заключается в том, что в этом случае мы не можем читать из ответов заголовок Set-Cookie с cookie ASP.NET_SessionId или задавать заголовок Cookie в запросах.
Это связывание с применением Silverligth:
<customBinding>
<binding name="customHttpBinding_IBasoaWebService" sendTimeout="01:00:00">
<binaryMessageEncoding />
<httpCookieContainer />
<httpTransport maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
</binding>
</customBinding>
И это связывание службы WCF:
<basicHttpBinding>
<binding name="basicHTTP" closeTimeout="01:00:00" openTimeout="01:00:00"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
receiveTimeout="01:00:00" sendTimeout="01:00:00" allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None" />
</binding>
</basicHttpBinding>
В Silverlight приложении мы используем этот код, чтобы прочитать Set -Cookie header в ответе:
IHttpCookieContainerManager cookieManager = channel.GetProperty<IHttpCookieContainerManager>();
if (cookieManager.CookieContainer == null)
cookieManager.CookieContainer = new CookieContainer();
Uri applicationUri = new Uri(Application.Current.Host.Source, "../");
string cookieString = cookieManager.CookieContainer.GetCookieHeader(applicationUri);
ParseCookieString(cookieString);
И это код для установки ASP.NET Session ID печенья в запросе:
IHttpCookieContainerManager cookieManager = channel.GetProperty<IHttpCookieContainerManager>();
if (cookieManager.CookieContainer == null)
cookieManager.CookieContainer = new CookieContainer();
Uri applicationUri = new Uri(Application.Current.Host.Source, "../");
Cookie cookie = new Cookie("ASP.NET_SessionId", aspNetSessionId);
cookieManager.CookieContainer.Add(applicationUri, cookie);
Проверка через Скрипач сообщения, которыми обмениваются я вижу, что служба WCF правильно передает заголовок Set-Cookie в первом ответе, но Silverlight не в состоянии прочитайте его. Я также попытался установить заголовок Cookie в запросе через класс CookieContainer, но не повезло. Я не вижу этого в Fiddler.
Может кто-нибудь дать мне совет о том, что я должен делать неправильно?
Большое спасибо заранее.
Хосе Антонио Arroba
Спасибо @Hyralex. Ваше предложение помогло мне подумать о другом способе отправки идентификатора сеанса ASP.NET. Наконец, я решил отправить его через пользовательский заголовок SOAP. Я не был уверен, будет ли режим «cookieless» работать с WCF и Silverlight –