Настройки дроссельной заслонки 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 определяется служебной дроссельной заслонкой ссылка