2010-01-13 83 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" />