2010-01-13 72 views
1

我有使用Wicked Code文章实现SqlSiteMapProvider问题。我使用的是VB.NET和SQL Server 2008 - 而OnSiteMapChanged事件没有触发(SqlDepdencyCache似乎完全不起作用)。'用dbo权限运行ASP.NET工作进程'是什么意思?

文章说:“你还需要运行与DBO权限ASP.NET辅助进程为SQL Server 2005缓存依赖于自动工作)。”

我不明白这是什么意思。我知道ASPNET用户帐户是什么,它运行aspnet_wp.exe,这基本上是ASP.NET运行时间,据我了解。我知道SQL上的DBO权限。但是我的SQL和Web服务器位于不同的计算机上,并且ASPNET不是域帐户。看起来很疯狂,试图简单地让SqlDepdencyCache发挥作用,并且我很难相信每个人都在这样做?

任何人有任何线索,我在这里失踪?

非常感谢

编辑:我发现我的问题!在我的存储过程中设置NOCOUNT引起它!因为这是在MSDN文档!!!!!

+0

你能不能运行在具有对您的SQL服务器DBO权限的域帐户的ASP.Net工作进程? – 2010-01-13 15:14:56

回答

1

SqlDependencyCache使用的SqlDependency和的SqlDependency在运行时部署一组服务,队列和存储过程中的数据库作为其基础设施的一部分。你可以阅读这篇文章更多的细节真的发生了什么The Mysterious Notification

当您创建站点地图提供,你提供一个连接字符串。此连接字符串指定SQL登录名和密码,或者指定应使用SSPI(或可信,或集成)身份验证。当提供用户和密码时,此用户用于登录到您的应用程序数据库(ASP数据库)。当使用SSPI时,使用ASP线程标识进行连接,该标识是应用程序池标识或模拟的用户标识。无论登录最终被使用,此登录名必须具有部署SqlDependency基础结构(创建队列,创建服务,创建存储过程)所需的权限。最简单的方法是简单地将此登录用户放在db_owner角色的数据库成员中(这是文章中称为'dbo priviledges'的正确措辞)。

所以取决于夜的连接字符串,你的应用程序池的身份和你的模拟设置,对应于由地图提供商使用的登录数据库的用户必须添加到db_owner角色。我不能告诉你需要做什么,因为这一切都取决于上面列举的可变因素。

+0

Thakns每个人的信息。我已经使asp.net工作进程以我自己的名义运行,这是一个对站点地图数据库具有dbo权限的域帐户。我甚至还尝试使用SSPI作为站点地图连接字符串。不管怎样,OnSiteMapChanged事件永远不会触发,所以直到每当ASP.NET决定让我的SqlSiteMapProvider(继承自StaticSiteMapProvider)上的_root成员无效时,该站点地图仍然是陈旧的。我在这里对这件事感到失落 - 不明白如何看起来被广泛使用的东西我无法工作,也没有其他人拥有相同的东西 – dferraro 2010-01-14 18:51:49

+0

您必须了解SqlDependency是如何工作的,正如我在链接http: //rusanu.com/2006/06/17/the-mysterious-notification/。那么你将能够解决它。 SqlDendepndy.Start基础设施是否已部署?查询是否被订阅?通知被解雇了吗?通知是否被传递?你看过sys.dm_qn_subscriptions吗?你看过sys.transmission_queue吗?仅仅因为一些文章说'你必须是dbo'(这是错误的,顺便说一句),并不意味着你的问题是一个访问问题。 – 2010-01-14 18:59:09

+0

谢谢Remus。我将浏览那个页面。你知道SQL 2008是否有什么变化吗?因为这就是我们现在的情况..再次感谢! – dferraro 2010-01-14 21:35:35

2

您的工作进程标识需要更改为域用户或Web用户和数据库服务器上具有匹配用户名/密码的用户。 SQL Server还需要启用Windows身份验证(或混合身份验证)。

IIS 5(的Windows XP/2000),您需要修改ASP.NET Process Identity在machine.config文件。

IIS 6/7(Windows Vista/7/2003/2008/R2)中,您应该只能修改应用程序池标识。如果这不起作用,请在您的web.config中启用<identity impersonate="true" />