2016-11-17 1 views
1

Я программно установил привязку msmq и дросселирование, но даже если я укажу MaxConcurrentCalls, MaxConcurrentSessions и MaxConcurrentInstances выше, чем 10, мне не удается обработать более 10 сообщений за раз.Как я могу получить MSMQ WCF для получения более 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 значений по умолчанию для большего числа соединений, которое 10.

В среде сервера нет значения по умолчанию 2.

Для обеспечения большего количества подключений, установленных при запуске приложения, когда загружается приложение, значение DefaultConnectionLimit.

ServicePointManager.DefaultConnectionLimit = 100; 

Наверху следует предусмотреть 100 соединений.

Смежные вопросы