我正在调查查询通知的问题。平台为 SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 标准版。
.NET 错误显示从 SqlNotificationInfo 枚举 ( http://msdn.microsoft.com/en-gb/library/system.data.sqlclient.sqlnotificationinfo(v=vs.80).aspx ) 报告的问题为:事件原因:隔离.
在跟踪期间,我注意到 Broker 对话之前的审核登录事件显示:
-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read uncommitted
因此,我的工作理论是不支持用于对话的事务隔离级别。但是这个集合在哪里,我该如何改变它?
我在这里读到过类似的问题:
http://www.roelvanlisdonk.nl/?p=3144 和
http://www.sqlskills.com/blogs/bobb/watch-the-sqlnotificationinfo-for-query-notifications/
对这个问题的解释原来是应用程序的另一部分显式打开读取未提交连接的问题。这些读取未提交的连接然后留在连接池中并由服务代理重用,无法使用此隔离级别进行操作。
解决方案很简单:确保服务代理使用不同的连接字符串进行连接,从而使用不同的连接池。