2011-09-15 4 views
2

3つのオペレーションコントラクトを持つWCFサービスがあります。私は[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]をこのサービスに設定しました。私の基本的な疑問は、一度に3つのサービスすべてを呼び出すことができるか、または1つの契約だけを一度に呼び出すことができることです。誰でも解決策を教えてください。ConcurrencyModeがSingleの場合に複数のオペレーションコントラクトを呼び出すことができます

答えて

0

同時実行モードには、インスタンスコンテキストモードのスコープがあります。 ConcurrencyModeSingleに設定すると、各サービスインスタンスが同時に1つの同時要求しか処理できないことがWCFに伝えられます。SingleConcurrencyModeのデフォルト値です。

あなたは(=あなたのサービスのシングルトンを行います)だけでなくSingleInstanceContextModeを設定しない限り、あなたのサービスのホストは、各要求(BasicHttpBindingまたはWebHttpBindingなどのステートレスバインディング)または接続された各プロキシのいずれかの新しいサービス・インスタンスを起動します(のようなステートフルバインディングNetTcpBinding,NamedPipeBindingおよびWsHttpBindingのいくつかの構成)。前者の場合、各サービスインスタンスは単一の要求を処理するためにのみ使用されるため、任意の数のクライアントからの要求を同時に処理できるため、ConcurrencyModeは効果がありません。後者の場合、ConcurrencyMode.Singleは、単一のクライアントプロキシからの要求が順番に処理されますが、複数のクライアントプロキシからの要求は同時に処理できることを示します。エクスポーズされたそれぞれの契約は別個のエンドポイントを必要とし、クライアント上の各消費エンドポイントは個別のプロキシインスタンスを必要とするため、各契約のプロキシはこの場合個別のサービスインスタンスを持ちます。

現在の構成では、サービスを消費できる同時クライアント数を制御します。

InstanceContextModeSingleに設定すると、一度に1つのリクエストしか処理できないサービスもあります。単一サービスのエンドポイントに公開されているすべての契約は、この場合、1つの同時要求を受け入れる単一サービスインスタンスによって処理されるため、実装される契約の数は関係ありません。

関連する問題