Почему IIS отфильтровывает запросы HTTP POST, отправляемые с использованием необработанного сокета TCP, и закрывается сразу после записи - PullRequest
0 голосов
/ 30 октября 2019

Я хочу отправить много коротких независимых запросов HTTP POST в простое приложение .NET webapi. Запросы создаются в цикле, и каждый из них отправляется с использованием нового TCP-соединения. Здесь важно, что каждый http-запрос записывает только на сервер, не ожидая ответа. Цикл So основан на операциях:

  • запрос на создание
  • открытый сокет
  • запрос на запись
  • закрытие сокета

В таком приложении scenerio webapi (ASP.NET MVC 5.2.7), размещенном на IIS 10, не поступает ни один из входящих запросов. Управление никогда не передается соответствующему методу в ApiController. Я заметил, что дополнительный сон (например, 100 мс), добавленный между записью сокета и закрытием, устраняет проблему. Но минимизация продолжительности сна приводит к увеличению количества пропущенных запросов. Также ожидание чтения сокета (ответ) является исправлением. Но это не удовлетворяет. Я не могу дождаться ответа сервера или добавить дополнительную задержку. Что здесь интересно, куча созданных запросов - не проблема. Даже один запрос, созданный таким образом, не появляется на другой стороне.

Что может быть причиной такого поведения?

Я тестировал подобное приложение webapi в ASP.NET Core 2.1. Kestrel обрабатывает все запросы как следует. Также работает отправка этих запросов на простой сервер TcpListener.

...