Сложные запросы HTTP POST с .NET

У меня есть метод веб-службы, разработанный с использованием .NET 3.5 (VS2008), который ожидает несколько строк (имя пользователя, пароль, тему, тип файла) и двоичный документ, закодированный в Base64.

Я включил как SOAP, так и HTTP POST. Хотя SOAP работает отлично, отправлять HTTP-запросы POST невозможно. Сервер отвечает: «Серверу не удалось обработать запрос. ---› Данные на корневом уровне недействительны. Строка 1, позиция 1».

Клиенты используют этот метод для загрузки своих документов из своих приложений.

Мне сказали, что .NET не поддерживает сложные структуры с использованием HTTP POST. Любой способ поддержать это?


person user240113    schedule 18.02.2010    source источник


Ответы (2)


.NET поддерживает сложные структуры с использованием POX (обычный старый xml) с привязкой httpBinding. Вот статья, в которой объясняется, как его настроить: http://fluxcapacity.net/2007/11/06/how-to-create-restpox-web-services-with-wcf/

Примечание. Все обновления SOAP, XML и JSON dto по-прежнему работают через HTTP POST. SOAP просто оборачивает вашу полезную нагрузку дополнительной разметкой, что фактически просто добавляет дополнительные накладные расходы и сложность для клиентов веб-сайта (например, Ajax).

Если вы хотите, чтобы ваш один и тот же веб-сервис работал через SOAP, а также другие конечные точки, например. XML или JSON, вас может заинтересовать эта инфраструктура веб-сервисов с открытым исходным кодом, которая включает все эти конечные точки без какой-либо дополнительной настройки.

person mythz    schedule 19.02.2010

Похоже, вы хотите перейти от настольного приложения к веб-приложению asp.

Хотя это обычно отличная идея, я думаю, что вам придется вести тяжелую битву, пытаясь отправить файлы через http/form на ваш веб-сервис. Хотя технически это возможно, мне трудно думать о реализации.

Возможно, вам повезет больше, используя форму в качестве прокси с вашими входными переменными и вводом файла для отправки в форму, например. веб-форму и используйте программный код на веб-форме, чтобы запустить экземпляр вашего класса веб-службы (нет необходимости использовать прокси, вы уже на своей стороне провода).

Если это не имеет смысла, дайте мне знать, и если это не может соответствовать вашему сценарию, обновите свой вопрос, чтобы более четко указать желаемый результат.

Если вы делаете это через Ajax, украсьте свой класс обслуживания атрибутом [ScriptService] и отправьте JSON через xmlhttp. Вы можете легко отправлять сложные аргументы.

см. http://www.codeproject.com/Articles/38999/Consuming-ASP-net-WebServices-WCF-Services-and-sta.aspx для получения инструкций.

Если вы этого не сделаете, пожалуйста, уточните, что делает публикация и как вы упаковываете данные.

person Sky Sanders    schedule 18.02.2010
comment
Я обновил свой вопрос: клиенты используют этот метод для загрузки своих документов в мою службу. - person user240113; 19.02.2010
comment
@ user240113, я обновил свой ответ. Я думаю, вам нужно переосмыслить свой запланированный подход, и я готов помочь. уточнить желаемый результат. - person Sky Sanders; 19.02.2010