Duplex Wcf Server Threading - Где выполнять синхронный ввод / вывод БД? - PullRequest
0 голосов
/ 09 сентября 2009

Вот мои основные предположения:

  1. Wcf выполняет мои методы работы службы в потоках IOCP (UnsafeQueueNativeOverlapped) вместо обычных потоков ThreadPool (QueueUserWorkItem).

  2. Блокировка ввода-вывода должна не выполняться внутри односторонних методов обслуживания.

  3. Блокировка ввода / вывода должна , а не выполняться внутри обычного потока ThreadPool.

Я считаю, что лучшей стратегией является цепочка асинхронных вызовов . Итак, если я получаю сообщение в свою одностороннюю операцию обслуживания, я делаю асинхронный вызов моей БД, а когда он завершается, делаю следующий асинхронный вызов БД и т. Д. И, наконец, отвечаю через мой обратный вызов wcf ...

Однако, каждый асинхронный вызов базы данных трудно выполнить. Я прибег к нарушению правил 2 и 3 выше, но мне это не нравится, потому что я считаю, что в конечном итоге это приведет к истощению потока ThreadPool. Есть ли лучшие стратегии?

Я рассмотрел использование CustomThreadPool Джона Скита, но я тоже не уверен, что это ответ.

1 Ответ

1 голос
/ 09 сентября 2009

Я бы предложил нарушить правило 3, поставив в очередь синхронные вызовы ввода / вывода для выполнения ThreadPool. Методы обслуживания по-прежнему немедленно возвращаются, но в конечном итоге работа выполняется в фоновом режиме, возможно, с помощью уведомления о возврате.

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