Настройки газа WCF - PullRequest
       8

Настройки газа WCF

6 голосов
/ 05 января 2012

Я работал над проверкой концепции, используя WCF и MSMQ.Я играл с настройками газа, используя настройки по умолчанию Эта статья , а также добавлял свои собственные настройки в файл конфигурации.У меня есть 2 процессора Quad Core Xeon под этим приложением.Независимо от того, какие настройки я применяю, всегда отображается только 8 сообщений одновременно (что соответствует моим процессорам).Я хочу, чтобы каждое из сообщений было обработано в одной транзакции, чтобы это могло быть частью проблемы ... не уверен.Я предположил, что он будет обрабатывать гораздо больше сообщений одновременно, чем это.

Поведение службы:

   [ServiceBehavior(UseSynchronizationContext = true,
                     ReleaseServiceInstanceOnTransactionComplete=true,
                     ConcurrencyMode = ConcurrencyMode.Single,
                     InstanceContextMode = InstanceContextMode.PerCall)]

Поведение конечной точки:

  <endpointBehaviors>
    <behavior name="endpointBehavior">
      <transactedBatching maxBatchSize="1" />
    </behavior>
  </endpointBehaviors>

Мое собственное регулирование службы:

<serviceThrottling maxConcurrentCalls="128" maxConcurrentSessions="800" />

Я что-то пропускаю?Может быть, я просто не до конца понимаю стандартные / настраиваемые настройки газа (вероятно).

РЕДАКТИРОВАТЬ

Я изменил режим ConcurrencyMode (изменен на несколько) вместе с параметром ReleaseServiceInstanceOnTransactionComplete.Похоже, что изменение на несколько не изменило ничего?

РЕДАКТИРОВАТЬ Возможно, это настройка TransactionBatch?У меня есть один набор ...?

Спасибо,

S

Ответы [ 2 ]

4 голосов
/ 09 января 2012

Я нашел блог, который указал мне на хорошую документацию по регулированию / производительности WCF.Я добавил еще несколько метаданных в свое приложение обработки и смог добиться нужной производительности.Добавляя больше информации в мой процесс (ManagedThreadID и т. Д.), Я мог видеть, что получаю намного большую пропускную способность, чем предполагал изначально.Я также нашел некоторые советы в блоге ниже, чтобы быть полезными.

Блог

Спасибо,

S

0 голосов
/ 10 января 2012

Поскольку вы запускаете инстансинг PerCall, вы должны увеличить MaxConcurrentInstances .Даже в .Net 4 значение по умолчанию равно 26. В 4.5 "По умолчанию это сумма значения по умолчанию MaxConcurrentSessions и значения по умолчанию MaxConcurrentCalls .."

BTW ... WCF вызовет ваш экземплярнесколько потоков, если вы не используете InstanceContextMode.PerCall.InstanceContextMode.PerCall + Any ConcurrencyMode = N одновременных вызовов метода в N экземплярах службы, где N определяется дросселем службы Ссылка

...