2

3つの運用契約を持つWCFサービスがあります。私[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]はこのサービスに設定しました。私の基本的な疑問は、一度に3つのサービスすべてに電話をかけることができるのか、それとも一度に1つの契約にしか電話をかけられないのかということです。誰でも解決策を教えてください。

4

1 に答える 1

0

同時実行モードには、インスタンスコンテキストモードのスコープがあります。設定ConcurrencyModeしたSingle場合は、各サービスインスタンスが1つの同時要求のみを処理できることをWCFに通知します。Singleこれはのデフォルト値でもありますConcurrencyMode

InstanceContextMode同様に構成しない限りSingle(=サービスをシングルトンにする)、サービスホストは、リクエストごと(またはのようなステートレスバインディング)または接続されたプロキシごと(のようなステートフルバインディング、およびの一部の構成)のいずれかで新しいサービスインスタンスBasicHttpBindingWebHttpBinding生成NetTcpBindingNamedPipeBindingますWsHttpBinding。前者の場合ConcurrencyMode、各サービスインスタンスは単一のリクエストを処理するためにのみ使用されるため、効果はありません=任意の数のクライアントからのリクエストを同時に処理できます。後の場合ConcurrencyMode.Single単一のクライアントプロキシからの要求は順番に処理されますが、複数のクライアントプロキシからの要求は同時に処理できることを示します。公開された各コントラクトには個別のエンドポイントが必要であり、クライアントで消費された各エンドポイントには個別のプロキシインスタンスが必要であるため、この場合、各コントラクトのプロキシには個別のサービスインスタンスがあります。

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

同様に設定InstanceContextModeすると、一度Singleに1つのリクエストのみを処理できるサービスが実際に提供されます。この場合、単一サービスのエンドポイントで公開されているすべてのコントラクトは、1つの同時リクエストのみを受け入れる単一のサービスインスタンスによって処理されるため、実装されているコントラクトの数は重要ではありません。

于 2011-09-15T07:42:38.227 に答える