我有一个在SQL Server 2008 Standard Edition中成功使用SqlDependency的应用程序。但是,如果我将连接字符串切换到SQL Server 2008 Express(启用了Broker),它将停止工作。
我不确定它是否特定于SQL Server Express,但是应该遵循哪些步骤来找出问题的原因?
更新。 “停止工作”是指通知不由SqlDependency引发
为了了解SQL依赖关系的工作方式,建议您阅读The Mysterious Notification。要对其进行故障排除,请遵循正常的Troubleshooting Dialogs步骤。正如您所发现的文章一样,典型的罪魁祸首确实是Service Broker消息传递所需的EXECUTE AS
上下文。从transmission_status
中的通知消息的sys.transmission_queue
中可以轻松地看到这一点,将数据库所有者更改为有效的登录名(sys.transmission_queue
)即可解决此问题。但是,可能还有其他问题。我的链接中的故障排除步骤将帮助您找到它们。
正如@Remus指出的那样,我基于误导性文档的假设是错误的:尽管许多在线资源都指出它不完全支持SSB,但SQL Server Express确实在某种程度上支持Service Broker。不过,将其保留在此处,以便搜索可以产生随后的对话框。
似乎SqlDependency依赖于查询通知。查询通知又依赖Service Broker。 SQL Server Express不支持Service Broker。此页面未明确列出查询通知:
ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa]
但是从那里您可以看到Express仅作为客户端支持Service Broker,从下面的页面中您可以看到Service Broker是一个依赖项(无双关语:)]]
http://msdn.microsoft.com/en-us/library/cc645993(SQL.100).aspx