Опрос WCF, фоновая обработка и истощение ресурсов - PullRequest
1 голос
/ 21 января 2010

У меня есть веб-сервис, реализованный с помощью WCF и размещенный в IIS7, с шаблоном связи с опросом при отправке. Первоначальный запрос сделан, который быстро возвращается и запускает фоновый процесс. Клиент опрашивает состояние фонового процесса. Этот интерфейс установлен и не может быть изменен (это симуляция внешнего сервиса, от которого мы зависим).

Я реализовал фоновую обработку, добавив еще один контракт на обслуживание к существующему сервису с контрактом на односторонние сообщения, который запускает длительный процесс. «Фоновый» сервис поддерживает базу данных обновленной со статусом для связи с основным сервисом. Это позволяет избежать создания каких-либо новых веб-служб или элементов для развертывания.

Проблема в том, что фоновый процесс сильно загружает процессор, и кажется, что он истощает вызовы других служб. Это займет весь процессор, и пока запущен один экземпляр фонового процесса, вызовы опроса состояния для основной службы могут занимать более минуты. Мне все равно, сколько времени займет фоновый процесс.

Есть ли способ ограничить использование ресурсов фоновым методом? Или очевидный способ сделать длительные асинхронные процессы в WCF без изменения моего контракта на обслуживание отправки / опроса? Поможет ли разделение их на разные веб-службы, если эти две службы все еще работают на одном сервере?

1 Ответ

2 голосов
/ 21 января 2010

В первую очередь я бы попытался снизить приоритет.

Если вы на самом деле выделяете отдельный процесс для фоновой работы, то вы можете сделать это следующим образом:

Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.BelowNormal;

Если это действительно просто фон нить , используйте вместо этого (из нити):

Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;

(На самом деле, лучше запустить поток приостановленным и изменить приоритет у вызывающей стороны перед его запуском, но, как правило, можно уменьшить собственный приоритет.)

По крайней мере, это должно помочь определить, действительно ли это проблема с процессором. Если после понижения приоритета у вас все еще есть проблемы, это может быть вызвано истощением, например файловым или сетевым вводом-выводом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...