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

StackOverflow https://stackoverflow.com/questions/1401227

Вопрос

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

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

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

  • Блокировка ввода-вывода не должна выполняться внутри обычной темы ThreadPool.

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

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

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

    Это было полезно?

    Решение

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top