Настройки дроссельной заслонки WCF

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

Сервис Образом:

   [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" />

Я что-то упускаю? Возможно, я просто не полностью понимаю настройки дроссельной заслонки по умолчанию / custom (вероятно).

редактировать

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

редактировать Может быть, это настройка TransactionBatch? У меня есть один набор...?

спасибо,

S

2 ответов


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

блог

спасибо,

S


поскольку вы используете percall instancing, вы должны увеличить MaxConcurrentInstances. Даже в .Чистая 4 по умолчанию 26. В 4.5 " значение по умолчанию-это сумма значений по умолчанию MaxConcurrentSessions и значение по умолчанию MaxConcurrentCalls.."

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