Вот мои основные предположения:
Wcf выполняет мои методы работы службы в потоках IOCP (UnsafeQueueNativeOverlapped) вместо обычных потоков ThreadPool (QueueUserWorkItem).
Блокировка ввода-вывода должна не выполняться внутри односторонних методов обслуживания.
Блокировка ввода / вывода должна , а не выполняться внутри обычного потока ThreadPool.
Я считаю, что лучшей стратегией является цепочка асинхронных вызовов . Итак, если я получаю сообщение в свою одностороннюю операцию обслуживания, я делаю асинхронный вызов моей БД, а когда он завершается, делаю следующий асинхронный вызов БД и т. Д. И, наконец, отвечаю через мой обратный вызов wcf ...
Однако, каждый асинхронный вызов базы данных трудно выполнить. Я прибег к нарушению правил 2 и 3 выше, но мне это не нравится, потому что я считаю, что в конечном итоге это приведет к истощению потока ThreadPool. Есть ли лучшие стратегии?
Я рассмотрел использование CustomThreadPool Джона Скита, но я тоже не уверен, что это ответ.