我想从aspx页面检索数据。但是,如果填充,则在静态字段中等待数据。
JQuery:
$.ajax({
url: "Services/JSON/GetMessage.aspx",
type: "GET",
dataType: "json",
success: function (response) { alert(response.Text); },
error: function (x, t, m) {
if (t === "timeout") {
alert("got timeout");
} else {
alert(t);
}
}
})
服务/ JSON / GetMessage.aspx
<%@ Page Language="C#" %>
<%
Response.Clear();
Response.ContentType = "text/json";
int tryCount = 0;
while (1 == 1)
{
if (ClsStaticFields.Messages.Count > 0)
{
foreach(string message in ClsStaticFields.Messages) {
Response.Write("{ Text:'" + message + "' }");
}
}
tryCount ++;
if (tryCount > 29) break; // 1 Minute wait and exit
System.Threading.Thread.Sleep(2000); // 2 Second wait
}
Response.End();
%>
我很好奇:
答案 0 :(得分:0)
我看到您使用GetMessage.aspx
页面,aspx
页面可能与会话相关联,这会影响其他用户。
如果可能,则禁用该页面的会话,一切正常。
<%@ Page Language="C#" EnableSessionState="false" %>
相对
Web app blocked while processing another web app on sharing same session
What perfmon counters are useful for identifying ASP.NET bottlenecks?
Replacing ASP.Net's session entirely
我不认为你在这个闭环中等待消息的方式是个好主意,我建议两种选择。
在浏览器using a javascript timer
上进行定期通话。以太网的方式每两秒钟收到一次消息,为什么不每隔几秒钟从浏览器调用一条消息呢?
甚至更好地使用彗星方法来调用服务器。以下是asp.net中的彗星示例:http://www.aaronlerch.com/blog/2007/07/08/creating-comet-applications-with-aspnet/
为什么不好,首先你使用属于asp.net iis的线程,并且与浏览器调用连接,即保持开放连接,很快你的开放连接就会用完,也许就是asp。净网线有问题。
定期检查就像使用Timers更好,而不是使用线程等待关闭循环,这里最好的地方是浏览器他自己。