私のWCFサービスライブラリは、Windowsサービスとしてホストされ、複数のクライアントからの要求を処理することになっています。 クライアントが頻繁に行うことが要求されているのは、リソースを大量に消費することです。WCF - 複数のクライアントからの要求の処理
I持っている以上のscenerioに関する2つの疑問:
- WCFサービスは、複数のクライアントの要求を処理する方法?
- プロセスを効率的にするためのWCF設定はありますか?
ありがとうございました!
私のWCFサービスライブラリは、Windowsサービスとしてホストされ、複数のクライアントからの要求を処理することになっています。 クライアントが頻繁に行うことが要求されているのは、リソースを大量に消費することです。WCF - 複数のクライアントからの要求の処理
I持っている以上のscenerioに関する2つの疑問:
ありがとうございました!
デフォルトのシナリオでは、WCFサービスホスト(サービスクラスをホストしているもの)は、入ってくるリクエストごとにサービスクラスの新しいインスタンスを作成し、要求を処理できるようにします( "per-call" activation )。
サーバーでserviceThrottling
の動作を使用すると、同時にアクティブなサービスクラスインスタンスの最大数を調整できます。
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ThrottledServiceBehavior">
<serviceThrottling
maxConcurrentCalls="25"
maxConcurrentSessions="25"
maxConcurrentInstances="25"/>
</behavior>
</serviceBehaviors>
</behaviors>
サービススロットリング動作のオプションとケニー・ウルフのblog post hereでそのデフォルト値の本当に良い説明があります。
サービスクラス(サービス契約を実装する)のInstanceContextMode
とConcurrencyMode
の設定は、サービスが並行性と複数の要求をどのように処理するかに大きな影響を与えます。
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall,
ConcurrencyMode=ConcurrencyMode.Single)]
class YourServiceClass : IYourService
{
.....
}
InstanceContextMode
(開発することが最も容易である)Single
ことができるPerCall
である(各呼び出し要求は、新しい、別個のインスタンスを取得し)、次いでConcurrencyMode
べきです。
InstanceContextMode
あなたは(非常に一般的ではない)、またはセッションベースのアプローチが必要な場合もPerSession
である可能性がありSingle
(サービス・クラスはシングルトンう - あなたは絶対に、積極的に有し、約すべての知っている限り、非常落胆は、これを使用するには癖とそれに伴う問題!)。
ConcurrencyMode
もReentrant
(デュプレックス契約およびバインディングにのみ該当)またはMultiple
(マルチスレッドシングルトンサービスクラス - 非常に危険で開発が困難です!
マーク