c# - sql 依赖项如何用于来回传递数据

标签 c# sql-server sqldependency

1) 我想知道 sql server 如何在客户端和数据库之间建立 channel 。我想一定有一个 channel ,这就是为什么 sql server 可以通过该 channel 向客户端发送通知。请详细讨论这个问题。因为我看到很多关于 sql 依赖的文章,但是每个人都给出了代码,但没有人详细解释它是如何工作的。 什么是服务代理?

Service Broker 体系结构允许您构建松散耦合的 SQL Server 实例,以便这些实例使用正常形式的消息传递相互通信。 Service Broker 使用 TCP/IP 从网络传输消息,因此允许加密消息传递。它既适用于使用 SQL Server 实例的应用程序,也适用于将工作分配到多个 SQL Server 实例的应用程序。 Service Broker 允许使用队列来保存消息,因此消息会被一条一条地处理,而无需调用者等待接收消息。

1) 我想知道服务代理总是以加密格式传递消息?

2) Service Broker 允许使用队列来保存消息。服务代理使用的那个队列的名称是什么。我如何查看该队列中存储的内容?

3) 我看到很多人创建队列但没有提到他们为什么创建?他们也没有在他们的代码中使用那个队列。这是一个网址和示例代码

http://www.dreamincode.net/forums/topic/156991-using-sqldependency-to-monitor-sql-database-changes/

CREATE QUEUE NameChangeQueue;
CREATE SERVICE NameChangeService ON QUEUE NameChangeQueue ([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO YourUserName;

ALTER DATABASE YourDatabaseName SET ENABLE_BROKER;

他们从不使用 NameChangeQueue 队列,为什么??我怎么知道谁会使用这个队列?

4) 即使我看到人们创建角色,但也不知道为什么在这种情况下需要角色?

所以请详细讨论我的所有观点,因为我需要理解所有观点。谢谢

最佳答案

先读 The Mysterious Notification了解查询通知的工作原理。 SqlDependency 只是一个利用查询通知的 .Net 包装器。这应该可以回答您的大部分问题。

查询通知使用 Service Broker (SSB) 在本地将通知传送到数据库中的队列。虽然 SSB 可以加密流量,但这与 SqlDependency 无关,因为交付是本地的,在服务器进程内。客户端应用程序通过发布 WAITFOR(RECEIVE) 来获取通知使用普通的 SqlConnection 在队列上。

在您发布的示例中,NameChangeQueue 确实从未使用过。通过使用 SqlDependency 对象,作者实际上是在调用 SqlDependency.Start() 时使用即时部署的临时队列。作者本可以使用较低级别的 SqlNotificationRequest,如 Using SqlNotificationRequest to Subscribe to Query Notifications 中所述。这允许您指定要使用的队列。

Query Notification Permissions 中描述了所需的权限,但是如果您使用 SqlDependency,那么您还需要创建 SqlDependency 使用的临时队列和存储过程的权限。

阅读链接的文章,如果您有更多问题,请在此处将它们作为新问题提出(请不要将更多问题作为评论发布)。

关于c# - sql 依赖项如何用于来回传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25503779/

相关文章:

c# - 这是做什么的,在哪里使用,它有什么用? C#类类型?

c# - 检索 CLSID 为 {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} 的组件的 COM 类工厂失败

c# - 我应该如何处理关于 C# 8.0 中的 nullable 选项的泛型问题?

sql - 如何使用 OVER 子句删除 SQL Server 中的重复行?

sql - 带有可选 "WHERE"参数的存储过程

SQL Server : concatenating values

sql-server-2005 - NHIbernate SysCache2 和 SQLDependency 问题

c# - 如何保持 sql 依赖性达到其目的

PHP & MySQL : Check if table's data has changed without polling?

c# - 仅将 API URL 限制为 Android 应用程序