1)我想知道sql server如何在客户端和服务器之间建立通道。 D b。我想必须有一个频道,为什么sql server可以通过该频道向客户端发送通知。请详细讨论这个问题。因为我看到很多关于sql依赖的文章,但每个机构都给出了代码,但没有机构解释它是如何工作的细节。 什么是服务经纪人?
Service Broker体系结构允许您构建松散耦合的SQL Server实例,以便实例使用正常的消息传递方式相互通信。 Service Broker使用TCP / IP从网络传输消息,因此允许加密消息传递。它既适用于使用SQL Server实例的应用程序,也适用于将工作分配到多个SQL Server实例的应用程序。 Service Broker允许使用Queue来保存消息,因此消息将被逐个处理,而调用者无需等待接收消息。
1)我想知道服务代理总是以加密格式传递消息?
2)Service Broker允许使用Queue来保存消息。服务代理使用的队列名称是什么。我怎样才能看到该队列中存储的内容?
3)我看到很多人创建队列,但没有提到他们创建的原因?他们也没有在代码中使用该队列。这是一个url&示例代码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)即使我看到人们创造了角色,但也不知道为什么在这种情况下需要角色?
所以请详细讨论我的所有要点,因为我需要了解所有要点。感谢
答案 0 :(得分:11)
首先阅读The Mysterious Notification以了解查询通知的工作原理。 SqlDependency只是一个利用查询通知的.Net包装器。这应该回答你的大部分问题。
查询通知使用Service Broker(SSB)将通知本地传递到数据库中的队列。虽然SSB可以加密流量,但这与SqlDependency无关,因为在服务器进程内交付是本地的。客户端应用程序通过使用普通SqlConnection在队列上发布WAITFOR(RECEIVE)
来获取通知。
在您发布的示例中,确实从未使用NameChangeQueue
。通过使用SqlDependency对象,作者实际上在调用SqlDependency.Start()
时正在使用临时部署的临时队列。作者可以使用Using SqlNotificationRequest to Subscribe to Query Notifications中描述的较低级别SqlNotificationRequest
,它允许您指定要使用的队列。
Query Notification Permissions中描述了所需的权限,但如果使用SqlDependency
,则还需要权限来创建SqlDependency使用的临时队列和存储过程。
阅读相关文章,如果您有更多问题,请在此处提出新问题(请不要发表更多问题作为评论)。