Если вы используете веб-службу, Протокол управления передачей (TCP / IP) будет действовать в определенной степени как очередь.
TCP обеспечивает надежный, заказанный
доставка потока байтов от одного
программировать с одного компьютера на другой
программа на другом компьютере.
Это гарантирует, что если клиент отправит пакет A, B, затем C, сервер получит его в таком порядке: A, B, затем C. Если вы должны ответить клиенту в том же порядке, что и запрос, то вы может понадобиться очередь.
По умолчанию максимальный рабочий поток ASP.NET установлен на 12 потоков на ядро ЦП. Таким образом, на двухъядерной машине вы можете запускать 24 соединения одновременно. В зависимости от того, сколько времени занимает расчет и что вы подразумеваете под «большим трафиком», вы можете попробовать разные стратегии.
Самое простое - это использовать serviceTimeouts и serviceThrottling, обрабатывать только то, что вы можете обработать, и отклонять то, что вы не можете.
Если это не вариант, увеличьте аппаратное обеспечение. Это второй вариант.
Наконец, вы можете сделать сервис полностью асинхронным. Реализуйте два метода
string PostCalc(...)
и double GetCalc(string id)
. PostCalc
принимает параметры, помещает их в очередь (или базу данных) и немедленно возвращает GUID (мне нравится использовать string
вместо Guid
). Клиент может использовать возвращенный GUID в качестве заявки на получение заявки и каждые несколько секунд вызывать GetCalc(string id)
. Если расчет еще не завершен, вы можете вернуть 404 для REST. Расчет теперь должен выполняться отдельным процессом, который отслеживает очередь.
Третий вариант является наиболее сложным, но результат аналогичен первому варианту установки ограничения на входящий запрос.