【发布时间】:2012-08-11 02:29:42
【问题描述】:
我正在为移动设备开发一个网站,该网站使用 jQuery (v 1.7.2) 对 ASP.NET (v 2.0.50727) Web 服务进行 ajax 调用。
调用在大约 95% 的时间里正常工作,但它会随机失败,返回 500 内部服务器错误。它在第一行代码执行之前在服务器端失败(第一行写入事件日志)。
我还没有看到使用我记得的桌面浏览器调用失败,但我已经看到使用 iPad 失败了。我加了
<browserCaps userAgentCacheKeyLength="256">
到 Web 服务的 web.config 文件,但这没有帮助。
javascript:
$.ajax({
type: "POST",
url: serverURL + "/getImage",
data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg,textStatus, jqXHR) {
...
}, error: function(xhr, ajaxOptions, thrownError) {
...
}
}).done(function(){
console.log("getImage call is done");
});
传递给 Web 服务的示例数据:
'{"formURL":"fileName.xml", "rowNumber":"1"}'
c#
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getImage(string formURL, string rowNumber) {
log("Retrieving image of form " + formURL);
string image = "";
string username = /*retrieve username*/;
string password = /*retrieve password*/;
if (username != null && username != "") {
image = /*code to retrieve the image*/;
}
return image;
}
private void log(string message) {
EvLog.WriteToEventLog(DateTime.Now.ToString("MM:dd:yyyy H:mm:ss:fff") + Environment.NewLine + message, 10);
}
我发现唯一对我有一点帮助的事情是,当调用失败时,因为来自 Web 服务的响应标头包含“jsonerror: true”,尽管我无法确定它为什么会随机失败。
感谢任何帮助!
【问题讨论】:
-
会不会是当它无法向上发送数据时,它以某种方式包含无效的 JSON?也许文件名或行号中有一些无效字符?将数据添加到变量中,即:
var data = '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}'然后在 ajax 调用之前添加一个console.log(data),这应该会在浏览器调试工具的 conole 输出窗口中显示您将要发送的数据。 Debuggin 工具内置于 Chrome 和 IE(我认为是 F12 热键),对于 FF,您需要安装 FireBug 插件。 -
除了下面的答案之外,您还可以尝试在 ajax 调用
traditional: true中弄乱另一个设置。我们发现它适用于发布 JSON,但我们使用的是 ASP.NET MVC3,但仍然值得一试。traditional: true将导致“浅”序列化。有关详细信息,请参见此处:api.jquery.com/jQuery.ajax 和 api.jquery.com/jQuery.param -
我在 ajax 调用之前有日志语句以查看正在发送的内容,它会在相同的数据集上随机失败(使用相同数据的多次调用)
-
即使添加了
traditional: true,我也看到它失败了
标签: c# jquery ajax web-services ipad