Лучший способ поставить в очередь запросы WCF, чтобы одновременно обрабатывался только один

Я создаю службу WCF для обработки всех функций QuickBooks SDK для двух компаний. Поскольку QuickBooks SDK должен открывать/закрывать фактическое приложение QuickBooks для обработки запроса, одновременно может обрабатываться только одно приложение, иначе QuickBooks переходит в очень плохое состояние. Я ищу лучший способ разрешить конечным пользователям делать запрос данных QuickBooks и заставить мое приложение WCF удерживать этот запрос до тех пор, пока предыдущий запрос не будет завершен.

Если в данный момент ничего не обрабатывается, то запрос будет выполнен немедленно.

Кто-нибудь знает о лучшем методе обработки такого типа функций? Какие-нибудь сторонние/встроенные библиотеки .NET?

Спасибо!


person someguy0005    schedule 14.03.2014    source источник


Ответы (2)


Используйте регулирование WCF. Его можно настроить, и он решит вашу проблему без изменения кода.

См. мой ответ для WCF ConcurrencyMode Single и InstanceContextMode PerCall.

person ErnieL    schedule 14.03.2014

Один из способов сделать это — поставить очередь между пользователем и приложением Quickbooks:

  • Запрос от пользователя помещается в очередь или таблицу данных.
  • Фоновый процесс считывает по одному элементу из очереди, отправляет его в Quickbooks и помещает результат в таблицу результатов.
  • Клиентское приложение считывает результат из таблицы результатов.

Это требует некоторой работы, но пользователь всегда сможет отправлять запросы, и одновременно будет обрабатываться только один запрос.

Решение, данное ErnieL, также будет работать, если вы используете режим параллелизма Single, но в сценариях с большой нагрузкой пользователи получат тайм-ауты.

person Shiraz Bhaiji    schedule 15.03.2014
comment
Спасибо, Шираз, в настоящее время им будут пользоваться 2 человека (по одному от каждой компании), поэтому на данный момент нагрузка не является проблемой, если только мы не масштабируемся как сумасшедшие. Как и в случае с большинством небольших компаний, самое быстрое внедрение решения было скорее бонусом, поскольку все ждут этого, чтобы исправить сломанный (ручной) процесс. - person someguy0005; 19.03.2014
comment
Существует ли простая облегченная структура очереди сообщений от Microsoft, которая не является MSMQ? Мы ограничены в том, что мы можем установить на наши серверы. - person SoftwareSavant; 10.12.2015
comment
@DmainEvent вы должны задать это как отдельный вопрос - person Shiraz Bhaiji; 10.12.2015