2

次のようなWCFサービスがあります

Public Class MyService

{

 [OperationContract]
 Public void OpperationA()
  {
  }

 [OperationContract]
 Public void OpperationB()
 {
  }

 [OperationContract]
 Public void OpperationC()
 {
  }

 [OperationContract]
 Public void OpperationD()
 {
  }
}

新しいプロキシで OperationA/B/C/D の上のすべての操作を呼び出す Windows サービスである、この WCF サービスのクライアントがあります。

現在の実装では、すべての操作を同時に呼び出すクライアントに問題があります。
InstanceContextMode = PerCall および ConcurrencyMode = Single

サービスを変更して一度に 1 つのリクエストのみを受け取ることができる InstanceContextMode と CONcurrency の組み合わせはありますか? つまり、クライアント プロキシ A が OPerationA を呼び出し、サービスがリクエストを処理しており、クライアント プロキシ B が OperationB を呼び出そうとした場合 (または他の操作)、最初のリクエストが完了するまでブロックする必要があります。

ありがとう

4

2 に答える 2

3

InstanceContextMode を Single に変更するだけで十分です。ここのMSDNドキュメントから:

ConcurrencyMode=Single : サービス インスタンスはシングル スレッドであり、再入可能な呼び出しを受け入れません。InstanceContextMode プロパティが Single で、インスタンスが呼び出しを処理している間に追加のメッセージが到着した場合、これらのメッセージは、サービスが利用可能になるか、メッセージがタイムアウトするまで待機する必要があります。

于 2014-11-19T09:56:58.597 に答える
0

http://msdn.microsoft.com/en-us/library/system.servicemodel.instancecontextmode%28v=vs.110%29.aspxから

InstanceContextMode 値が Single に設定されている場合、ConcurrencyMode 値も Multiple に設定しない限り、サービスは一度に 1 つのメッセージしか処理できません。

複数のサービスホストがある場合、明らかに機能しません。

于 2014-11-19T09:56:46.827 に答える