3

質問はほとんどタイトルにありますが、詳しく説明します。

少し拡張されたユーザー インターフェイスとして機能する Silverlight アプリケーションがあります。

共有データベースの一貫性を維持するために、プログラムの主要部分はサーバー上で実行されます。

これが私の質問の出番です。WCF サービスを呼び出す 2 つのクライアントはそれぞれ、そのサービス内でスレッドを取得しますか、それとも完全な AppDomain をそれぞれ取得しますか?

違いは、最初のシナリオの場合は DB を簡単に共有できますが、2 番目のシナリオでは共有できないことです - 私が理解しているように。

編集:これは、使用されるオブジェクトが物理メモリ (静的シングルトン変数) に保存される ID マップ パターン [Fowler] を DB が使用するためです。

(私は大学の先生に尋ねて、この一見単純な質問をする前にかなり検索しました)

4

1 に答える 1

1

WCF サービスのスレッド モデルは、サービスに対して構成する ConcurrencyMode によって決まります: http://msdn.microsoft.com/en-us/library/system.servicemodel.concurrencymode.aspx

AppDomains について - サービスのホスティング方法に完全に依存します。独自の ServiceHost を手動で実行している場合、独自の管理とスピンアップを開始することにしない限り、サーバー側には常に 1 つの AppDomain が存在します。

IIS 内でホストしている場合は、リクエストの処理方法は IIS 次第です。1 つの AppDomain を再利用したり、複数の AppDomain をスピンアップしたり (web.config の設定をオーバーライドして、ワーカー プロセスごとに 1 つの AppDomain のみを許可しない限り)、複数の物理的なワーカー プロセスをスピンアップしたり (これは本質的に複数の AppDomain を意味します) する場合があります。 Web ガーデン モードが有効になっている。

とはいえ、これがデータアクセス戦略に影響を与える理由が正確にはわかりません. 複数のスレッドまたは AppDomain で DB を共有しても問題はありません。

于 2012-04-01T18:55:00.607 に答える