1

シナリオ: Silverlight (4) で開発された PRISM アプリケーションがあり、ASP.NET サーバー側アプリケーションを使用して複数の Web サービスをホストしています (Web サービスは WCF サービスにアクセスしますが、ここではそれほど重要ではありません)。 )。Silverlight アプリケーションは、Web サービスをクロスドメインで呼び出すことができる必要があります (つまり、Web サービスは Silverlight アプリケーションをホストしている同じサーバー上にあるとは限りません)。

Silverlight アプリケーションはいくつかのモジュールで構成され、それぞれが ASP.NET Web サービスにアクセスします。

私は Silverlight と PRISM の経験があまりありませんが、私が見る限り、これは非常に珍しいシナリオではありません...

問題: 私の課題は、2 つの異なるモジュールが Web サービスにアクセスすると、Web サーバーで 2 つの新しいセッションを取得することです。両方のモジュールが同じ HTML ページ上 (そして同じブラウザー セッション内) にあるため、Web サーバー上で同じセッションを取得すると思いました...?

インスタンスを登録し(Container.RegisterInstanceを使用)、モジュールがWebサービス呼び出しを行う必要があるたびにこのインスタンスを取得することにより、(Unityを使用して)コンテナでWebサービスProxy-clientをグローバルに利用できるようにしようとしました( Container.Resolve を使用しています)、しかしこれは役に立たないようです。

ただし、同じモジュール内で行われた呼び出しは、常にサーバー上で同じセッションを取得します。

ここで私が見逃しているものを見ることができますか...?

ありがとう!

ジョン

4

1 に答える 1

1

自分なりの答えを見つけたようです。

問題は、アプリケーションが起動時に複数の Web サービス呼び出しを開始していたことです (異なる PRISM モジュールが独立して動作していました)。また、Web サーバーから応答が返される前にいくつかの呼び出しが行われた場合、後続の呼び出しが行われる前にクライアントにセッションが返されませんでした (したがって、「ASP.NET_SessionId」Cookie は提供されませんでした)。

私の解決策は、たとえば単純な Ping のような Web サービスに対して1 つの呼び出し (いつものように非同期) を行い、この応答が返されるまで Web サーバーへの他のすべての呼び出しを保留することでした。次に、後続のすべての呼び出しには、サーバー上で同じセッションが与えられます (すべてのヘッダーに "ASP.NET_SessionId" Cookie が含まれているため)。

実際には、この呼び出しは PRISM シェルによって行われ、応答を受け取る前にモジュールがロードされていません。次に、セッション状態を手元に置く前に、他のモジュールがトリガーハッピーにならないことを絶対に確信しています。

それでも、このソリューションで他の問題が発生した場合は、ご連絡いただければ幸いです。

ありがとう!

ジョン

于 2010-05-05T09:12:11.557 に答える