2013-08-06 2 views
1

Я разрабатываю приложение Windows Phone 8, которое использует веб-службу. Эта конкретная веб-служба требует запроса GET с телом сущности.Поддерживает ли System.Net.Http.HttpClient отправку запроса GET с помощью тела объекта?

Я использую System.Net.Http.HttpClient для отправки этого запроса, который я успешно использовал для отправки различных других веб-запросов (GET, POST и PUT). Это первый запрос GET, который включает полезную нагрузку и, следовательно, включает заголовок Content-Type и Content-Length.

Запрос завершается с исключением вроде следующего:

'taskhost.exe' (CLR C: \ Windows \ system32 \ coreclr.dll: Silverlight AppDomain): Loaded «C: \ Windows \ system32 \ ан -US \ mscorlib.debug.resources.dll. Модуль был построен без символов. Исключение типа «System.Net.ProtocolViolationException» произошло в System.Windows.ni.dll и не обрабатывалось до управляемой/родной границы. Первое исключение исключения типа «System.Net.ProtocolViolationException» произошло в mscorlib. ni.dll исключение типа «System.Net.ProtocolViolationException» произошел в mscorlib.ni.dll и не был обработан до управляемого/родной границы

Включая полезной нагрузки с запросом GET немного необычно, хотя по к моим исследованиям, прямо запрещенным RFC.

У меня нет возможности сменить веб-службу. Действительно ли System.Net.Http.HttpClient не позволяет GET с объектом? Если нет, есть ли какие-нибудь проблемы?

спасибо.

ответ

1

Я знаю, что прошло некоторое время с тех пор, как вы спросили об этом, но здесь все равно.

При отправке полезной нагрузки в теле запроса GET не может нарушаться клиентская сторона RFC, это противоречит обычной практике. Что делает RFC , так это то, что сервер, выдающий такой запрос, никоим образом не обязан смотреть на что-либо другое, кроме URI запроса и заголовка Host:, чтобы определить, каков его ответ.

Котировка из спецификации HTTP 1.1 в RFC2616, раздел 5.2 гласит: «Точный ресурс, идентифицированный с помощью интернет-запроса, определяется путем изучения как поля Request-URI, так и поля заголовка хоста». Это ничего не говорит о теле запроса.

Это означает, что даже если то, что вы пытаетесь сделать, не является нарушением каких-либо RFC, веб-служба, используемая вашим приложением WP8 , -. Если у вас нет выбора, кроме как использовать его, это похоже на то, что вам нужно будет запустить собственный HTTP-иш-клиент, который, как я предполагаю, вы уже уже сделали. Готовое решение в System.Net.Http.HttpClient не будет демонстрировать поведение, которое никогда не будет полезно при общении с совместимым сервером.

Смежные вопросы