繁体   English   中英

对ASP.NET Web服务的jQuery ajax POST调用随机失败

[英]jQuery ajax POST call to ASP.NET Web Service randomly fails

我正在开发一个用于移动设备的网站,该网站使用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错误,我首先想到的是传递给参数的数据是错误的。

下面的行引用了变量的内容,我认为这是从代码中的其他地方加载的:

data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',

假设您已经确定rowNumber是整数值并且不会破坏它,则可能是'url'变量破坏了您的JSON格式。 发生这种情况最简单的方法是,如果文件名中包含未转义的引号,尤其是当它在连接时关闭参数值的时间比预期的早时。

始终有可能字符对于字符集无效。 您是否有触发失败的示例数据? 提供的示例看起来很干净,因此我假设它不是错误情况之一。

不要以这种方式建立数据

data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',

可能导致JSON字符串格式错误。

而不是使用JSON.stringify方法将您的JavaScript对象字符串化:

data: JSON.stringify({formUrl: url, rowNumber: rowNumber}),

JSON.stringify将为您完成所有工作,以将对象表示为有效的JSON字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM