用手动代码替换SqlDependency

Nir*_*Nir 0 c# sql-server .net-3.5

我们在.Net 3.5中工作,我们在代码中有SqlDependency,这要求.Net用户具有CREATE权限和其他权限.
这里的DBA希望避免给.Net用户提供如此巨大的权限.

有没有办法通过手动执行SqlDependency的操作来绕过SqlDependency?运行具有.net之一的更多权限的后台进程并创建必要的程序等?

谢谢!


为了将来参考,我只想说我们通过一个非常简单的解决方案解决了权限问题:SqlDependency使用不同的连接字符串,其用户具有与常规.net连接字符串不同的权限.

Rem*_*anu 7

请改用SqlNotificationRequest.这是底层的基础类,在其基础上构建了SqlDependency.要了解SqlDependency的工作原理,请阅读The Mysterious Notification.

要接收查询通知,您必须拥有有效的服务和队列.应用程序实例无法共享服务和队列,因为它们将接收彼此的通知.这就是为什么SqlDependency选择对临时服务,队列和过程进行"及时"部署(当您调用Start()时),这就是驱动要求具有CREATE权限的原因.

较低级别的SqlNotificationRequest允许您指定要使用的服务(以及队列),但缺点是服务和队列必须已存在.但是,您可以在安装阶段创建它们,当安装或.msi由特权管理员运行时.当用户调用时,代码使用已创建的服务.但同样,您必须为每个应用程序实例(即每个应用程序域)创建一个服务,这使得事情变得复杂.