SqlDependency
我目前正在开发一个依赖于服务代理的应用程序。
每次我将数据库从开发状态移至暂存状态时,我都会遇到一个问题,即我收到一个 YSOD,指出
当前数据库的 SQL Server Service Broker 未启用,因此不支持查询通知。如果您希望使用通知,请启用此数据库的 Service Broker。
我不是 SQL Server 专家,所以我不明白为什么会发生这种情况。我尝试了很多方法,例如运行
ALTER DATABASE [DbName] SET ENABLE_BROKER
在新恢复的数据库上。这并不能解决问题。还可以调用
ALTER DATABASE [DbName] SET NEW_BROKER WITH ROLLBACK IMMEDIATE
没有帮助。
我还在DISABLE_BROKER
我的开发数据库上运行了它,然后执行了备份。恢复到临时服务器,然后运行两者ENABLE_BROKER
,并SET NEW_BROKER
希望有所收获。
两台服务器都在 Windows 2003 上运行 SQL 2005。
我的应用程序正在使用SqlDependency.Start(connectionString)
,所以我相信我正在使用默认服务代理端点而不是命名端点(?)
数据库被命名为不同的在开发和登台服务器上,但一些配置确保应用程序使用正确的连接字符串。
我遗漏了什么?我做错了什么?
移动(备份/恢复)使用 Service Broker/SqlDependency 的数据库的正确方法是什么?
答案1
您需要使用 ENABLE_BROKER 选项恢复数据库(通过使用 WITH ENABLE_BROKER 子句恢复数据库命令)。请记住,数据库将保留其唯一的代理 ID,因此在执行此操作后,您需要注意恢复的数据库与开发环境中剩余的数据库之间没有冲突。
当您调用 NEW_BROKER 时,一个新的唯一代理 ID 已被分配给数据库,因此现有对话注定失败(它们无法再到达目标代理 ID)。
以下是有关管理经纪人身份的更多信息:MSDN:管理服务代理身份