Замените низкоуровневый транспорт ссылочных вызовов веб-сервиса на пользовательский. - PullRequest
0 голосов
/ 14 марта 2010

Я не уверен, что название действительно звучит правильно, поэтому я приведу больше объяснений здесь. Я начну с самого начала :)

Я использую c # и .net для своей разработки.

У меня есть приложение, которое отправляет запросы в какой-то мыльный веб-сервис, и для каждого пользовательского запроса оно генерирует от 3 до 10 запросов на веб-сервис, все они должны запустить async для завершения за один раз, поэтому я использую метод Async из веб-сервис генерирует ссылку, а затем ждет результата при обратном вызове. Но похоже, что он запускает поток (или берет его из пула) для каждого асинхронного вызова, который я делаю, поэтому, если у меня есть 10 клиентов, я могу порождать от 30 до 100 потоков, и это звучит ужасно даже для моего 16-ядерного сервера :) Так что я Я хотел заменить низкоуровневую транспортную реализацию своей собственной, которая использует неблокирующие сокеты и может обрабатывать не менее 50 сокетов, работающих параллельно в одном потоке, с небольшими накладными расходами. Но я на самом деле не знаю, куда лучше всего поместить свое переопределение.

Я проанализировал System.Web.Services.Protocols.SoapHttpClientProtocol класс и увидел, что у него есть какой-то метод GetWebRequest, который я действительно мог бы использовать. Если бы я только мог как-то прервать созданный им объект и получить оттуда http-запрос со всеми заголовками и телом, а затем отправить его с моими собственными сокетами.

Есть идеи, какой подход использовать? Или, может быть, есть что-то встроенное в каркас, который я могу использовать?

1 Ответ

0 голосов
/ 14 марта 2010

Рассматривали ли вы использование .NET WCF вместо .NET 2.0 веб-сервисов? С помощью .NET WCF гораздо больше гибкости с точки зрения вариантов транспорта, чем с веб-службами .NET 2.0. У него есть более крутая кривая обучения, но оно того стоит. Для получения более подробной информации о параметрах транспорта проверьте Параметры транспорта WCF В канале MSN 9 вы можете найти несколько обучающих видео .

...