Что означает net::ERR_INCOMPLETE_CHUNKED_ENCODING и как решить эту проблему?

Я пишу веб-приложение, которое генерирует отчет из Bing Ads API, следуя приведенному здесь примеру:

http://msdn.microsoft.com/en-us/library/bing-ads-reporting-request-and-download-a-keyword-performance-report-in-php.aspx

У меня скомпилирован код, однако при запуске сервер резко завершает запрос и возвращает ERR_INCOMPLETE_CHUNKED_ENCODING прямо в начале этого блока кода:

$waitTime = 30 * 1; 
$reportRequestStatus = null;

// This sample polls every 30 seconds up to 5 minutes.
// In production you may poll the status every 1 to 2 minutes for up to one hour.
// If the call succeeds, stop polling. If the call or 
// download fails, the call throws a fault.

for ($i = 0; $i < 10; $i++)
{
    sleep($waitTime);

    // PollGenerateReport helper method calls the corresponding Bing Ads service operation
    // to get the report request status.

    $reportRequestStatus = PollGenerateReport(
            $proxy, 
            $reportRequestId
            );

    if ($reportRequestStatus->Status == ReportRequestStatusType::Success ||
        $reportRequestStatus->Status == ReportRequestStatusType::Error)
    {
        break;
    }
}

Я пытался распечатать значения и отладить их построчно, но не могу понять, что вызывает эту ошибку. Гугление ошибки тоже ничего не дает. Мне было интересно, сталкивался ли кто-нибудь с этой ошибкой раньше и мог бы сказать мне, что ее вызывает?

Спасибо!


person eluong    schedule 16.05.2014    source источник


Ответы (1)


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

ASP.NET имеет некоторые параметры конфигурации, но в двух словах, если вы очистите буфер до завершения запроса, разбитого на фрагменты, вы получите эту ошибку. Вот ссылка, которую я нашел некоторое время назад, когда столкнулся с похожей проблемой. Удачи!

Изменить. Кроме того, здесь находится страница IIS, на которой описывается, как включить обработку ответов, которая может вызывать вашу проблему: включить или отключить кодирование передачи HTTP 1.1 по частям.

Чтобы включить кодирование передачи по частям HTTP 1.1 для службы публикации World Wide Web, используйте следующий синтаксис: appcmd set config /section:asp /enableChunkedEncoding:True|False True включает кодирование передачи по частям HTTP 1.1, тогда как False отключает кодирование передачи по частям HTTP 1.1. Значение по умолчанию верно.

..

а также

Чтобы указать период времени по умолчанию, в течение которого ASP-страницы позволяют сценарию выполняться перед завершением сценария и записью события в журнал событий Windows, используйте следующий синтаксис: appcmd set config /section:asp /scriptTimeout: timeSpan Переменная timeSpan представляет максимальное время (чч:мм:сс), в течение которого запрос ASP может быть выполнен до того, как событие будет записано в журнал событий Windows. Значение по умолчанию — 00:01:30. http://technet.microsoft.com/en-us/library/cc730855%28v=ws.10%29.aspx

также эти ребята очень хорошо это объясняют:

ASP.NET передает данные клиенту в кодировке фрагментами (Transfer-Encoding: chunked), если вы преждевременно очищаете поток ответа для запроса Http, а заголовок Content-Length для ответа не задан вами явно.

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

Однако в моем случае я делал асинхронный вызов Ajax к веб-службе ASP.NET из javascript. И веб-метод, обрабатывающий запрос, явно сбрасывал ответ клиенту, а затем закрывал ответ (мне нужно было сделать это, потому что запрос был выдан из вызова автозагрузки хранилища ExtJs, и мне нужно было закрыть соединение на сервере, чтобы клиентское хранилище принимало и загружало сериализованные данные json).

http://www.rahulsingla.com/blog/2010/06/asp-net-sets-the-transfer-encoding-as-chunked-on-premature-flushing-the-response

person Brandt Solovij    schedule 16.05.2014
comment
Спасибо! Я буду смотреть в него. Решение совсем тривиальное? - person eluong; 18.05.2014
comment
Кое-что — это просто требовало некоторого чтения о внутренней работе IIS, которую я хотел знать в то время, но эй — это формирует характер, верно? - person Brandt Solovij; 19.05.2014
comment
Я больше не получаю ERR_INCOMPLETE_CHUNKED_ENCODING, поэтому изменение Content-Length действительно «решает» эту конкретную ошибку. Однако теперь я получаю ERR_CONTENT_LENGTH_MISMATCH, есть предложения? - person eluong; 20.05.2014
comment
только что обновил свой ответ дополнительной информацией. По сути, это смешанный результат настроек, которые вам нужно будет посмотреть и оценить с вашей стороны, что лучше всего подходит для вашей среды и приложений. - person Brandt Solovij; 20.05.2014
comment
Еще раз спасибо, это определенно дает материал для работы над решением. Я посмотрю, что у меня получится, и сообщу вам о результате! - person eluong; 20.05.2014
comment
Проблема действительно была в конфигурации сервера. Хотя я не нашел, что именно вызвало проблему, переход на новый сервер решил все. Спасибо за помощь! - person eluong; 24.06.2014