2

背景情報はこちら。私はそのように構成されたWCFサービスを持っています

   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

ここで、このコンテキスト モードがどのように機能するかを正確に理解するための助けが必要です。

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

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

4

2 に答える 2

1

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

使用するメソッドを構成した場合、ConcurrencyMode.Singleこのブロッキング動作が表示されます。

serviceThrottlingアプリケーションが適切に調整されていることを確認するために、構成を確認することを検討する必要があります。

<serviceBehaviors>
    <behavior name="throttleBehavior">
        <serviceThrottling maxConcurrentCalls="15" maxConcurrentInstances="10"/>
    </behavior>
</serviceBehaviors>
于 2011-12-21T17:24:23.087 に答える
0

次の構成

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

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

于 2013-01-19T06:22:37.967 に答える