Я не уверен, что название действительно звучит правильно, поэтому я приведу больше объяснений здесь.
Я начну с самого начала :)
Я использую c # и .net для своей разработки.
У меня есть приложение, которое отправляет запросы в какой-то мыльный веб-сервис, и для каждого пользовательского запроса оно генерирует от 3 до 10 запросов на веб-сервис, все они должны запустить async для завершения за один раз, поэтому я использую метод Async из веб-сервис генерирует ссылку, а затем ждет результата при обратном вызове. Но похоже, что он запускает поток (или берет его из пула) для каждого асинхронного вызова, который я делаю, поэтому, если у меня есть 10 клиентов, я могу порождать от 30 до 100 потоков, и это звучит ужасно даже для моего 16-ядерного сервера :) Так что я Я хотел заменить низкоуровневую транспортную реализацию своей собственной, которая использует неблокирующие сокеты и может обрабатывать не менее 50 сокетов, работающих параллельно в одном потоке, с небольшими накладными расходами. Но я на самом деле не знаю, куда лучше всего поместить свое переопределение.
Я проанализировал System.Web.Services.Protocols.SoapHttpClientProtocol
класс и увидел, что у него есть какой-то метод GetWebRequest, который я действительно мог бы использовать. Если бы я только мог как-то прервать созданный им объект и получить оттуда http-запрос со всеми заголовками и телом, а затем отправить его с моими собственными сокетами.
Есть идеи, какой подход использовать? Или, может быть, есть что-то встроенное в каркас, который я могу использовать?