これらの質問のほとんどの回答は、サービスの並行性をどのように管理するかによって異なります。あなたがConcurrencyMode
とInstanceContextMode
のために設定したものに依存するため、決定的な答えはありません。 WCFの同時実行管理により、サービスのスレッドの振る舞いやパフォーマンスを微調整することができます。長くて厄介な(しかし非常に詳細な)読みはconcurrency management is available on MSDNです。
InstanceContextMode
では、サービスのインスタンス化方法を定義できます。大量の作業を大量に実行し、多くの呼び出しを処理するサービスでは、一般的な考え方は、この設定と同様にインスタンス化することです。着信するクライアント要求は、その度にサービスの別のインスタンスで処理されます。
ConcurrencyMode
(メインプレイヤー)は、指定された時間にサービスインスタンスにアクセスできるスレッドの数を定義します。 ConcurrencyMode=Single
では、一度に1つのスレッドだけがサービスインスタンスにアクセスできます。これは、SynchronizationConext
を有効にしたかどうかによっても異なります。SynchronizationConext=true
の場合、サービスが別の要求に応答している場合は、クライアントの呼び出しがキューに入れられます。したがって、着信サービスコールは、前のコールが最初に処理されるまでキューに入れられます。 ConcurrencyMode=Multiple
設定では、任意の数のスレッドがサービスインスタンスへのアクセスを許可されます。つまり、スレッドプール内で使用可能なスレッド数(CPUパワーに直接関係している)を考えれば、複数の並行処理モードを持つキャッチは、デフォルトではSynchronizationContext
がfalseに設定されるため、状態が管理されないため、サービスが多くの信頼性がないため、呼び出しを受信して応答する順序が異なります。の素敵な短い要約。
これらの設定は、でホスティングするときになるだろうタイミングの、おそらくあまりにも代表をInstanceContext
モードと組み合わせて使用する場合、あなたのサービスのパフォーマンスに影響を与え、結果だけで自己ホスト環境であると思われるものの(this pretty nice article which explores various concurrency modes and instance context settings and their effects on performanceが表示されますIIS)。
サービスの並行性を管理する方法は、パフォーマンスに大きく影響します。理想的には、可能な限り多くのスレッドを利用可能にしたい(ThreadPoolの最小スレッドを増やして)サービスにし、サービスが処理資源を持つ限り、着信サービス呼び出しがキューに入れられないようにしたい。しかし、マルチスレッドを過剰に使用すると、状態管理とクライアント要求に応答する順序が犠牲になります。
本当に質問です。より多くのことを学ぶことができます。あなたは実際に物を探検するためのテストの負荷を書くべきです。とにかくそれをやらなければならないのであれば答えが返ってくるだろう。 –