Как увеличить размер POST для веб-службы ASMX? - PullRequest
7 голосов
/ 20 января 2011

Справочная информация

Я разрабатываю серверный элемент управления ASP.Net, который должен взаимодействовать с веб-службой ASMX.Элемент управления на стороне сервера использует объект WebClient для связи с веб-службой, поскольку его часто приходится многократно использовать в различных приложениях, и для облегчения его разработки разработчикам не требуется создавать ссылку на службу для веб-службы..

Реализация

Во время использования элемента управления требуется отправка сериализованного объекта в веб-службу.Объект сериализуется с использованием XmlSerializer, а полученная строка XML сжимается с использованием библиотеки сжатия chilkat.Вызов веб-службы для элемента управления выглядит следующим образом:

webClient.UploadStringAsync(new Uri(serviceHost + serviceMethod), "POST", sendData)

Содержимое sendData (string) равно compressedResponse={CompressedData}.

У веб-службы есть метод, определенный следующим образом, чтобы получать данные и затем распаковывать строковое значение с помощью библиотеки chilkat перед десериализацией объекта с помощью XmlSerializer.

public void SaveResponse(string compressedResponse)

Связь между управлением и службой работает.Первоначально не было настроек или привязки, определенных в web.config для любого из вышеперечисленных.После начального поиска я добавил

<httpRuntime maxRequestLength="20480"/>

в файлы клиента и сервера web.config.Это не имеет значения.

Проблема

Сжатые или несжатые данные, публикуемые в веб-службе в переменной sendData, слишком велики для обычного запроса POSTи поврежден.Это подтверждается при проверке последних нескольких символов строки до и после ее публикации на сервере в сжатом формате и без сжатия, в документе XML отсутствует последний корневой тег при проверке в отладчике.string не может быть распакован, и поэтому сервисный вызов каждый раз завершается ошибкой.

Как увеличить размер POST для запроса WebClient, чтобы обеспечить получение полной строки сервером?

Я рассмотрел различные вариантыв Google, но никто не дает мне достаточно хороший образец того, где внести изменения, или образцы того, как эти изменения должны выглядеть.Я совершенно заблудился относительно того, нужно ли вносить изменения на сервере или на веб-сайте-потребителе, и, поскольку для этого не определены привязки, как создать привязку в web.config для вызова службы ASMX HTTP.

Ответы [ 2 ]

6 голосов
/ 20 января 2011

Я полагаю, что вы превышаете максимальную длину запроса ASP.NET.Это можно изменить с помощью файла конфигурации, например:

<system.web>
  <httpRuntime executionTimeout="240" maxRequestLength="20480" />
</system.web>

Значение maxRequestLength указывается в КБ, поэтому приведенная выше настройка позволит использовать 20 МБ.Вы также можете применить настройку только к выбранным URL-адресам, используя тег местоположения, например

<location path="yourservice.asmx">
    <system.web>
        <httpRuntime executionTimeout="240" maxRequestLength="20480" />
    </system.web>
</location>
1 голос
/ 26 января 2011

Кажется, что невозможно изменить размер POST для веб-службы ASMX, когда включен только HttpPost.

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

...