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