2011-12-21 12 views
2

ここに背景情報があります。私はそうPerCallインスタンスコンテキストで実行するWCFサービスを設定するにはどうすればよいですか?

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 

のように構成されたWCFサービスを持っている今、私はこのコンテキストモードの動作を正確にどのようにいくつかの助けを理解する必要があります。

ここで私が対処している問題があります。議論のために、サーバから実行して返すために10秒かかる呼び出しがあるとします。 2つのコールを同時に(Ajaxリクエストを使用して)コールすると、10秒後に最初のリクエストが返されます。しかし、2回目の要求は20秒後に返されます。

私は、このコンテキストモードが両方の要求を互いに独立して処理し、両方を同時に返すことを期待していました。サービスを正しく設定しましたか?

答えて

1

PerCall各コールには個別のインスタンス(極端なスケーラビリティの場合は)が割り当てられます。メソッドを呼び出すたびに、新しいサーバーオブジェクトが作成されます(個別スレッド)。要求が処理されると(メソッドはを返します)、新しいインスタンスが解放されます。

ConcurrencyMode.Singleを使用するようにメソッドを設定した場合、このブロック動作が表示されます。

serviceThrottlingの設定を確認して、アプリケーションが適切に調整されていることを確認する必要があります。

<serviceBehaviors> 
    <behavior name="throttleBehavior"> 
     <serviceThrottling maxConcurrentCalls="15" maxConcurrentInstances="10"/> 
    </behavior> 
</serviceBehaviors> 
0

以下の構成

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

常に各呼び出しのためにすぐにサービスコンテキストを作成しなくてもよいです。使用されているバインディングがセッションが有効で、サービスがIDisposeを実装している場合は、別のクライアントのサービスインスタンスがすでに存在する間、クライアント呼び出しがキューに入れられます。したがって、あなたのケースでバインディングの詳細を確認してください。

関連する問題