日期:2014-05-17  浏览次数:20581 次

关于使用comet长连接的问题
我在网上下载类似《asp.net comet实例》的例子进行修改之后,在自己的网站上能够实现我需要的功能(类似股票的实现价格变动)。

该页面aspx加载之后,通过jquery的ajax方法与服务器建立长链接。服务器上使用了一个System.Threading.Timer实现每5分钟就踢掉所有链接(返回空字符串),而客户端收到空字符串时也重新连接。

但现在有几个问题无法解决:
一:打开带有长连接的页面时,在IE、Chrome等浏览器上正常,但用Safari时,则它的地址栏加载进度条一直处于页面未完全加载的状态,看起来很不爽。

二:如果是使用iPad来打开该页面,则最多只能打开两个页面(这两个页面都处于未加载完毕的状态),导致此时iPad的浏览器无法打开其它页面(看起来好像是堵死了)在这里如果关闭带有长连接的两个页面的其中一个,则其它页面立即加载完毕。

三:最要命的是:当服务器有几十个连接时,这些带有长连接的页面就会出错,进而整个网站慢到几近无法访问。注:服务器是自己的,Windows2003+SQL2008, .net3.5。服务器宽带绝对够!而且通过服务器上出错的日志我也无法知道是哪出错了。
出错信息如下:

异常信息: 
    异常类型: NullReferenceException 
    异常消息: 未将对象引用设置到对象的实例
线程信息: 
    线程 ID: 5 
    线程帐户名: NT AUTHORITY\NETWORK SERVICE 
    是否正在模拟: True 
    堆栈跟踪:    在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
 
烦请精通comet长连接的高手帮忙,万分感谢。

------解决方案--------------------
不知道。不知道。