2

一度にすべてのクライアントからの1つの要求を処理したいWCFサービスがあります。クライアントAの要求を処理し、クライアントBがクライアントAが終了するまで待機してから、サービスがそれを確認しようとするようにします。以下のコードがこれを達成したと思いました。

[ServiceContract]
public interface IRestServiceImpl
{...}

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
public class RestServiceImpl : IRestServiceImpl
{...}

一度に1つのクライアントのみを処理し、他のクライアントをキューで待機させるにはどうすればよいですか?

4

1 に答える 1

0

サービスのインスタンス数と同時実行モードを制御する必要があります。デフォルトでは、サービスはとして構成されInstanceContextMode.PerSessionます。つまり、クライアントAのすべての要求は順番に処理され、クライアントBも同様に処理されますが、サービスの同じインスタンスを使用していないため、相互に順番に処理されることはありません。

ServiceBehavior次のように変更してみてください。

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, 
                 InstanceContextMode=InstanceContextMode.Single)]
public class RestServiceImpl : IRestServiceImpl
{...}

このトピックの詳細については、セッション、インスタンス化、および同時実行に関するMSDNドキュメントを確認してください。

于 2012-12-20T19:01:10.873 に答える