读者关闭问题

时间:2016-06-25 12:14:54

标签: asp.net asp.net-web-api ado.net signalr

我正在使用带有web api的asp.net。在我的项目中,有一个消息页面,所有客人都可以访问。如果所有客人都有消息,则此消息页面将自动刷新所有使用signalR的访客。

但有些访客在消息页面上收到错误,因为所有访客页面同时刷新。所以在同一个函数后面的代码(它负责从数据库中获取消息)被同时调用一些客户正确检索的消息,但对于其他一些客户,读取器在检索消息之前就已关闭。

1 个答案:

答案 0 :(得分:0)

问题原因:

由于使用了“application.Application.Add(requestUrl,clientDatabase)” 这是在应用程序变量中添加数据库,以便在整个应用程序范围内使用相同的数据库连接。因此,在对数据库执行某些同时请求时,使用了相同的连接,并且任何请求导致连接被关闭,导致执行过程中的其他请求出错。

例如 向所有guest虚拟机发送消息会导致刷新所有guest虚拟机消息窗口。在刷新时,我们从所有来宾的数据库中获取消息。所以有同时请求,如果任何人完成消息提取然后它关闭连接,因为其他请求也使用相同的连接,其他请求得到错误

分辨率:

而不是在“application.Application.Add(requestUrl,clientDatabase)”中添加数据库 我们将添加“application.Context.Items.Add(requestUrl,clientDatabase)”。 这使得数据库仅针对单个HTTP请求保持不变。

参考网址

使用关键字 http://www.c-sharpcorner.com/article/leveraging-the-using-keyword-in-C-Sharp/ http://www.codeproject.com/Articles/442069/ASP-NET-How-To-Use-Open-Close-Connections-Correctl

命令行为详细信息 https://msdn.microsoft.com/en-us/library/system.data.commandbehavior(v=vs.110).aspx

确定打开/活动连接的总数 How to determine total number of open/active connections in ms sql server 2005

连接池详细信息 https://www.pythian.com/blog/sql-server-understanding-and-controlling-connection/

HttpContext.Current.Items http://www.codeproject.com/Articles/146455/When-can-we-use-HttpContext-Current-Items-to-store

HttpContext.Current.Application http://forums.asp.net/t/1378763.aspx?Need+to+understand+HttpContext+Current+Application http://www.codeproject.com/Articles/87316/A-walkthrough-to-Application-State

使用性能计数器的连接池

http://www.c-sharpcorner.com/uploadfile/CMouli/monitoring-database-connections-using-performance-counters/

ADO.NET中的性能计数器

https://msdn.microsoft.com/en-us/library/ms254503(v=vs.110).aspx

在IIS服务器上提供性能计数器访问

"Access to the registry key 'Global' is denied" when accessing performance counters