【发布时间】:2015-01-15 22:34:40
【问题描述】:
我有一个需要从网络应用程序访问的 webapi 服务
如果我直接调用 webapi url(例如 /api/scrccc/32),它会在不到 5 秒的时间内返回数据,但是从 jquery 调用时,需要超过 5 分钟(!!!)分钟
我的ajax调用是
j$.ajax({
type: "GET",
url: '/api/scrccc/' + id + '?dt=' + new Date().getTime(),
error: function (jqXHR, status, error) {
//....
},
success: function (data, status, jqXHR) {
//....
}
});
在打开或关闭 javascript 控制台 (firebug) 以及在 Chrome 和 FF 中会发生这种情况
有人知道为什么会这样吗?
编辑:
以下是带有 Jquery 调用的 Chrome 中的时间安排:
以及直接访问地址栏中 url 的 Chrome 中的计时
...浏览器中的时间也带有时间戳
编辑 - 6 月 1 日
我意识到从 ajax 调用 webapi 和从浏览器的地址栏调用 webapi 是有区别的: - ajax 调用请求响应为 json - 浏览器请求响应为 XML
所以我在 Postman 中使用 json 和 xml 响应测试了这两个请求,结果让我感到困惑:带有 xml 响应的请求花费了 1261 毫秒,而 json 响应花费了 47000 毫秒(!!!)
(Chrome 控制台中显示的时间是本地 IIS Express,而 Postman 中显示的最新时间是 Internet 上真实 Web 服务器上的真实应用程序,这就是它们不同的原因,但规模仍然存在)
确实,正如一些人所建议的,问题出在服务器端,但不是在提供数据的实际应用程序代码中,而是在序列化点。
我的 Webapi 是 2.1(版本 5.1.2),Json.Net 版本是 6.0.3(都是最新版本) 我没有使用任何特定 json 序列化程序的特殊设置,因此,据我所知,WebApi 使用 Json.Net。
知道什么会导致序列化时间出现如此巨大的差异吗?
谢谢
【问题讨论】:
-
我猜实际上需要 5 分钟才能得出结果的服务器端代码比 ajax 调用更有趣?
-
查看 Chrome 调试器的网络选项卡,查看它提供的时间信息。可能会为您提供下一步的线索。
-
@adeneo,它不是服务器端代码 - 如果我直接在浏览器的地址栏中调用 webapi url 或使用休息客户端作为 Chrome 的邮递员,它会在 5 秒内返回 json 数据
-
而且它也不是您发布的通用 ajax 功能,因为它已被数百万开发人员毫无问题地使用,所以正在发生其他事情,我们无法真正帮助您解决这个问题显而易见,jQuery 的 ajax 没有任何问题。
-
当你直接在浏览器中测试时,你是否包含带有唯一时间戳的 dt={timestamp} 参数?
标签: asp.net-web-api