2016-11-17 3 views
1

私はプログラムでmsmqバインディングとスロットルを設定しましたが、MaxConcurrentCalls、MaxConcurrentSessions、MaxConcurrentInstancesを10以上に設定しても、一度に10個以上のメッセージを処理できません。ここでWCF MSMQを取得して一度に10個以上のメッセージを取得するにはどうすればよいですか?

はホストを作成するためのコードです:ここでは

 var host = new ServiceHost(typeof(MqProcessRequestServer)); 
     var binding = new NetMsmqBinding(NetMsmqSecurityMode.None) 
     { 
      UseSourceJournal = true, 
      ReceiveErrorHandling = ReceiveErrorHandling.Drop, 
      ReceiveRetryCount = 0, 
      MaxRetryCycles = 0, 
      RetryCycleDelay = TimeSpan.FromMinutes(1), 
      ExactlyOnce = true, 
      Durable = true, 
      MaxReceivedMessageSize = 4000000000, 
      ReceiveTimeout = TimeSpan.FromSeconds(30) 
     }; 

     var queueUri = string.Format("net.msmq://localhost/private/{0}", scriptEngineVersion); 
     host.AddServiceEndpoint(typeof(IMqProcessRequest), binding, queueUri); 

     // Set throttling to ScriptEngine.Capacity in datamodel 
     var throttling = new ServiceThrottlingBehavior 
     { 
      MaxConcurrentCalls = capacity, 
      MaxConcurrentSessions = capacity, 
      MaxConcurrentInstances = capacity 
     }; 
     host.Description.Behaviors.Add(throttling); 

     // Set service timeout 
     var behavior = host.Description.Behaviors.Find<ServiceBehaviorAttribute>(); 
     behavior.TransactionTimeout = TimeSpan.FromSeconds(60).ToString(); 

は、サービスの動作です:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall, ReleaseServiceInstanceOnTransactionComplete = false)] 
public class MqProcessRequestServer : IMqProcessRequest, IDisposable 

私は、すべての少ないし、10点の作品罰金、容量が異なる値を試してみました最大で設定されていますが、10を超える数字は10にすぎません。

答えて

2

あなたが許可する10の接続は、ServicePointManager.DefaultConnectionLimitのデフォルトによって発生します。それを設定することでMSDN documentation上の注意事項のセクションで

は言う:

ある接続の高い数にサーバー環境(ASP.NET)DefaultConnectionLimitのデフォルトで使用されます

なしサーバー環境では、デフォルトは2です。

アプリケーションの起動時にappdomainがロードされると、DefaultConnectionLimitが設定されます。

ServicePointManager.DefaultConnectionLimit = 100; 

上記の行は100接続が可能です。

関連する問題