ASP.NETセッション状態を使用するように構成されたWCFサービスがあります。このWCFサービスをWPFクライアントでテストしましたが、セッション状態はさまざまなWeb要求にわたって維持されています。
現在、ブラウザーから独立した新しいHttpスタックを使用するSilverlightアプリからこれと同じWCFサービスを使用しようとしています。WCFサービスの障害を理解できるようにするには、このスタックを使用する必要があります。私の問題は、この場合、ASP.NET_SessionId cookieを使用してSet-Cookieヘッダーを応答から読み取ったり、要求に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ヘッダーを読み取ります。
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セッションIDCookieを設定するためのコードです。
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);
交換されたメッセージをFiddlerで確認すると、WCFサービスが最初の応答でSet-Cookieヘッダーを正しく送信していることがわかりますが、Silverlightはそれを読み取ることができません。また、CookieContainerクラスを介してリクエストにCookieヘッダーを設定しようとしましたが、うまくいきませんでした。Fiddlerでは表示されません。
誰かが私が間違っているに違いないことについてアドバイスをくれませんか?
よろしくお願いします。
ホセ・アントニオ・アロバ