我正在编写一个Web应用程序,根据此处显示的示例生成Bing Ads API的报告:
我编译了代码,但是在运行时,服务器突然终止请求并在此代码块的开头返回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;
}
}
我尝试打印出值并逐行调试,但我无法弄清楚是什么导致了这个错误。谷歌搜索错误也没有带来任何相关的问题。我想知道是否有其他人之前遇到过这个错误,并且可以告诉我是什么导致了它?
谢谢!
答案 0 :(得分:1)
如果我没有弄错 - 这是由于您的服务器配置为处理各种请求的方式。
ASP.NET有一些配置设置,但简而言之,如果在分块请求完成之前刷新缓冲区,则会出现此错误。这是我在前一段时间遇到类似问题时发现的链接。祝你好运!
编辑:此外,还有一个IIS页面,其中介绍了如何启用可能导致问题的响应处理: 启用或禁用HTTP 1.1分块传输编码
为万维网启用HTTP 1.1分块传输编码 发布服务,使用以下语法:appcmd set config / section:asp / enableChunkedEncoding:True | False True启用HTTP 1.1 分块传输编码,而False禁用HTTP 1.1分块 转移编码。默认值为True。
...
和
指定ASP页面允许脚本运行的默认时间长度 在终止脚本并将事件写入Windows之前 事件日志,使用以下语法:appcmd set config / section:asp / scriptTimeout:timeSpan变量timeSpan表示最大值 时间(hh:mm:ss)ASP请求可以在写入事件之前运行 到Windows事件日志。默认值为00:01:30。 http://technet.microsoft.com/en-us/library/cc730855(v=ws.10).aspx
这个家伙也很好地解释了这一点:
ASP.NET以分块编码(Transfer-Encoding:chunked)将数据传输到客户端,如果您过早刷新响应 用于Http请求的流和用于的Content-Length头 您没有明确设置响应。
通常这不应该是一个问题,因为大多数现代HTTP客户端 能够处理chunked和non-chunked服务器 响应,自动对分块响应进行去块(请注意 分块传输编码仅由HTTP 1.1规范定义。
但是,在我自己的情况下,我正在进行异步Ajax调用 来自javascript的ASP.NET web服务。并且处理的网络方法 请求将响应显式刷新到客户端,然后关闭 响应(我需要这样做,因为请求是从 一个ExtJs商店的自动加载调用,我需要关闭 服务器上的连接,以便客户端Store接受和加载 json序列化数据)。