2013-08-13 2 views
1

Я пишу сервера базы кода веб на HttpListener, но часто встречаются исключения, как этоSystem.Net.ProtocolViolationException: Байты должны быть записаны в поток превышает размер Content-Length байтов указано

«System.Net. ProtocolViolationException: байты, которые должны быть записаны в поток , превышают указанный размер байтов длины содержимого.

Пример кода:

context.Response.Output = System.Text.Encoding.UTF8.GetBytes("xxx"); 
if (context.Response.Output != null && context.Response.Output.Length > 0) 
{ 
    context.Response.ContentLength64 = context.Response.Output.Length; 
    using (var stream = context.Response.OutputStream) 
    { 
     stream.Write(context.Response.Output, 0, context.Response.Output.Length); 
    } 
} 

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

ответ

2

У вас, похоже, та же проблема, что и вопрос ниже. Вам нужно проверить, является ли HttpMethod запросом HEAD; в этом случае вы не можете записать байты в OutputStream, и попытка сделать это приведет к тому, что вы получите исключение.

ProtocolViolationException with Chrome

+0

но я использовал только GET, POST, PUT, DELETE в HTTPMethod. – user2677620

+0

Клиент все еще может отправить вам запрос главы. Вы поймаете это, журнал и ошибки и выручите? Если нет, тогда вам нужно проверить, получаете ли вы запрос главы в этом случае. – huntharo

+0

Я посылаю запрос HEAD с Fiddler, сервер throw ProtocolViolationException. браузер автоматически отправит запрос HEAD? – user2677620