Silverlight 4.0 - HttpWebRequest, выбрасывающий ProtocolViolationException - PullRequest
3 голосов
/ 02 июня 2010

Я получаю «System.Net.ProtocolViolationException: операция недопустима из-за текущего состояния объекта». ошибка при попытке позвонить

 var request = (HttpWebRequest)WebRequest.Create(uri);

 request.Method = "GET";

 request.ContentType = "text/xml";

 request.BeginGetRequestStream(RequestCompleted, request);

Ответы [ 2 ]

6 голосов
/ 02 июня 2010

Я подозреваю, что это может быть потому, что вы выполняете BeginGetRequestStream для объекта запроса, для которого вы указали метод "GET".

При выполнении «GET» сервер не будет ожидать тело объекта в запросе, поэтому вам следует перейти прямо к BeginGetResponse. Также указывать ContentType в запросе необязательно, он указывает тип контента, отправляемого в теле сущности запроса, но, как указано, «GET» не отправляет контент, он только получает контент.

0 голосов
/ 23 августа 2010

Я не согласен с ответом AnthonyWJones.В спецификации HTTP я не нахожу ничего, что запрещало бы запросу "GET" содержать тело сообщения.Я думаю, что это, к сожалению, стало фактическим пониманием того, как работает HTTP, так как обычно нет необходимости (или способа) включать тело сообщения.Сказав это, он прав в отношении причины этого конкретного исключения.Тем не менее, я думаю, что BCL следует изменить, чтобы позволить это.

Если кто-то может указать на это, мне было бы очень интересно узнать, где спецификация исключает это: HTTP RFC 2616

...