无法使用jquery ajax调用(IIS 6)将lenghty JSON字符串发送到ASP.NET HttpHandler

时间:2013-11-30 15:19:27

标签: json jquery httphandler

背景

我有一个Http处理程序,它使用http POST方法在jQuery Ajax调用中以json字符串格式接收SIM / CDMA号码('8953502103000101242'),以便在服务器上激活它们。

问题:

在本地开发环境中我可以发送多达65K个SIMS的号码(json字符串中的8953502103000101242键/值对)但是当我部署到LIVE服务器时,我遇到了以下问题。

如果我将用逗号分隔的2000个SIMS号码发送到Http处理程序,那么Http处理程序会成功接收http请求但是当我发送的内容超过(json字符串中的3000,4000,5000个SIM号码)时,http请求无法到达HttpHandler甚至在几个小时之后在服务器上。

如果我使用jquery在http POST中发送5000个SIM号码,则发送的总大小请求为138.0 KB。它应该传递给服务器,因为服务器maxRequestLength是2048576.但是当我们将它部署在实时服务器上并且它在本地开发环境中正常工作时它不会被发送到服务器。

尝试解决方案:

我尝试通过编辑web.config中的httpRuntime配置来解决此问题,如下所示

通过使用上面的httpRuntime配置,我在Firefox firebug net状态中注意到它一直在等待发送请求为executionTimeout =“7200”,但如果executionTimeout =“600”则返回超时错误。

ITENDED SOLUTION:

我想如果我尝试在Machine.config文件中同步上面的httpRuntime元素,那么它可以正常工作。

需要SOLUIOTN

问题是什么以及如何解决它。请在这方面提出建议。等待快速解决方案。

对HttpHandler的Jquery调用如下:

$.ajax({
                type: "POST",
                url: "../../HttpHandlers/PorthosCommonHandler.ashx",
                data: { order: JSON.stringify(orderObject), method: "ValidateOrderInput", orgId: sCId, userId: uId, languageId: lId },
                success: function(response) {
                    var orderResult = new dojo.data.ItemFileReadStore({
                        data: {
                            jsId: "jsorderResult",
                            id: "orderResult",
                            items: response.Data
                        }
                    });
});

更新

我已经诊断出了这个问题。一个问题是web.config中的executionTimeout配置。并且在进行此更改之后第二个问题是由于长时间的操作请求被互联网(网络通信)中断。我确保我有可靠的互联网连接,并再次测试它,它的工作原理。

但现在我面临另一个问题。我的httphandler向Web服务发送请求,我在响应中遇到异常。

The operation has timed out

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。

一个问题是web.config中的executionTimeout配置。并且在进行此更改之后第二个问题是由于长时间的操作请求被互联网(网络通信)中断。我确保我有可靠的互联网连接并再次测试它。

将webserivces配置如下。

<httpRuntime executionTimeout="7200" enable="true" maxRequestLength="2048576" useFullyQualifiedRedirectUrl="false" />

[WebMethod(Description = "Delete template",BufferResponse = false)]

指定“BufferResponse = false”表示只要响应的任何部分可用,.NET就应该开始向客户端发送响应,而不是等待整个响应变为可用。