Принуждение веб-службы asmx обрабатывать запросы по одному за раз


Я отлаживаю веб-службу ASMX, которая получает "пакеты" запросов. то есть, вполне вероятно, что веб-служба получит 100 асинхронных запросов в течение примерно 1 или 2 секунд. Каждый запрос, кажется, занимает около секунды для обработки (это ожидается, и я в порядке с этой производительностью). Однако важно то, что каждый запрос обрабатывается последовательно и никакой параллельной обработки не происходит. Я не хочу никакой параллельной обработки запросов из-за внешних компонентов, вызываемых веб-служба. Есть ли способ заставить веб-службу обрабатывать каждый ответ только последовательно?

Я видел атрибут maxconnection в машине.config но это, кажется, работает только для исходящих соединений, где, как я хочу, чтобы дросселировать входящие соединения.

Обратите внимание, что рефакторинг в WCF на данный момент не является вариантом.

Мы используем IIS6 на Win2003.

3 2

3 ответа:

Возможно, вам следует поставить запросы в очередь и обрабатывать их один за другим?

Это может заставить клиентов опрашивать результаты (если они даже нуждаются в них), но вы получите последовательный конвейер, который вы хотели...

В IIS7 можно установить ограничение на количество подключений, разрешенных к веб-сайту. Можете ли вы использовать IIS7?

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