【问题标题】:SQL Dependency on SQL Server 2008 ExpressSQL Server 2008 Express 上的 SQL 依赖关系
【发布时间】:2011-08-05 11:06:50
【问题描述】:

我有一个应用程序成功地将 SqlDependency 与 SQL Server 2008 标准版一起使用。但是,如果我将连接字符串切换到 SQL Server 2008 express(启用了 Broker),它就会停止工作。

我不确定它是否特定于 SQL Server Express,但我应该按照哪些步骤来找出问题的原因?

更新。 “停止工作”是指 SqlDependency 不会引发通知

【问题讨论】:

    标签: sql-server sql-server-express sqldependency


    【解决方案1】:

    要了解 SQL 依赖项的工作原理,我建议您阅读 The Mysterious Notification。要对其进行故障排除,请按照正常的Troubleshooting Dialogs 步骤进行操作。正如您在文章中找到的那样,典型的罪魁祸首确实是 Service Broker 消息传递所需的 EXECUTE AS 上下文。您可以从sys.transmission_queue 中的通知消息的transmission_status 中轻松看到这一点,并将数据库所有者更改为有效登录名 (ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa]) 即可解决此问题。但是,可能还有其他问题。我的链接中的故障排除步骤将帮助您找到它们。

    【讨论】:

      【解决方案2】:

      正如@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

      【讨论】:

      • 但是“仅限客户端”是什么意思?
      • 这意味着另一个实例上的服务代理可以发送消息到 Express,但 Express 不能自己发送消息 - 无论是在实例内部还是发送到其他实例。跨度>
      • -1 Express Edition 完全支持 Service Broker。唯一的限制是两个 Express 实例不能在没有路由的情况下首先通过更高版本交换消息。 SQL 依赖和查询通知在 SQL Express 中工作得很好
      • @Remus 你能解释一下为什么我指出的 SQL Server 2008 文档说 Service Broker 仅在 Express 中支持作为客户端吗?
      • 其他一些文档充其量是模糊的。这个听起来好像它只能与其他版本一起使用(暗示不是独立的):msdn.microsoft.com/en-us/library/ms165704(v=sql.90).aspx
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多