2009-10-09 25 views
5

私のWCFサービスライブラリは、Windowsサービスとしてホストされ、複数のクライアントからの要求を処理することになっています。 クライアントが頻繁に行うことが要求されているのは、リソースを大量に消費することです。WCF - 複数のクライアントからの要求の処理

I持っている以上のscenerioに関する2つの疑問:

  1. WCFサービスは、複数のクライアントの要求を処理する方法?
  2. プロセスを効率的にするためのWCF設定はありますか?

ありがとうございました!

答えて

11

デフォルトのシナリオでは、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でそのデフォルト値の本当に良い説明があります。

サービスクラス(サービス契約を実装する)のInstanceContextModeConcurrencyModeの設定は、サービスが並行性と複数の要求をどのように処理するかに大きな影響を与えます。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall, 
       ConcurrencyMode=ConcurrencyMode.Single)] 
class YourServiceClass : IYourService 
{ 
    ..... 
} 

InstanceContextMode(開発することが最も容易である)SingleことができるPerCallである(各呼び出し要求は、新しい、別個のインスタンスを取得し)、次いでConcurrencyModeべきです。

InstanceContextModeあなたは(非常に一般的ではない)、またはセッションベースのアプローチが必要な場合もPerSessionである可能性がありSingle(サービス・クラスはシングルトンう - あなたは絶対に、積極的に有し、約すべての知っている限り、非常落胆は、これを使用するには癖とそれに伴う問題!)。

ConcurrencyModeReentrant(デュプレックス契約およびバインディングにのみ該当)またはMultiple(マルチスレッドシングルトンサービスクラス - 非常に危険で開発が困難です!

マーク

関連する問題