2

我想从 aspx 页面检索数据。但是,如果填充,则在静态字段中等待数据。

查询:

   $.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();
%>

我很好奇:

  • 这个等待期会影响其他用户吗?
  • 这会导致 IIS 或页面上的锁定吗?
  • 这种用法对 CPU 有严重影响吗?
4

1 回答 1

0

我看到您使用GetMessage.aspx页面,一个aspx可能与会话相关的页面,这会影响其他用户。

如果可能并且一切正常,请禁用该页面的会话。

<%@ Page Language="C#" EnableSessionState="false" %>

相对的:

在共享同一会话时处理另一个 Web 应用程序时 Web 应用程序被阻止
哪些性能计数器可用于识别 ASP.NET 瓶颈?
完全替换 ASP.Net 的会话

全景

我不认为你在这个闭环中等待消息的方式是个好主意,我建议有两种选择。

在浏览器上定期调用using a javascript timer。您每 2 秒获取一次消息的以太网方式,那么为什么不每隔几秒从浏览器调用该消息呢?

或者甚至更好地使用彗星方法来调用服务器。这是 asp.net 中的彗星示例:http ://www.aaronlerch.com/blog/2007/07/08/creating-comet-applications-with-aspnet/

为什么不好,首先你使用属于asp.net iis的线程,并与浏览器调用连接,即留下一个打开的连接,很快你的打开连接就会用完,也许还有asp.net的网络线程有问题。

像你一样定期检查最好使用定时器来完成,而不是使用线程等待关闭循环,这里最好的地方是他自己的浏览器。

于 2012-07-04T08:02:55.417 回答