2009-12-15 41 views
0

我有一個實例化DataContext對象的ASP.Net MVC控制器操作,我當前將連接字符串直接傳遞給構造函數。我正在使用模擬,並且我已驗證控制器操作中的當前用戶是當前的Windows身份驗證。 Web應用程序的用戶,但是在運行SQL跟蹤時,查詢始終以網絡服務運行。數據上下文對象在Web應用程序的另一個項目中被引用,但我將連接字符串直接傳遞給構造函數,所以這不應該成爲問題。這是什麼是目前的控制器動作:Linq to ASP.Net中的SQL MVC使用模擬時作爲網絡服務

 // verified the user is the current Windows Auth. user of the web app 
     var user = this.User; 

     var connectionString = "Data Source=serverName;Initial Catalog=dbName;Integrated Security=true"; 
     var context = new CustomDataContext(connectionString); 
     var test = context.Customers.Select(i => i.fullname).ToList(); 

一切都讓到數據庫罰款除外查詢始終運行的網絡服務,而不是當前用戶的事實。有關爲什麼會出現這種情況以及如何解決的任何想法?

回答

0

你最有可能看到的網絡服務,因爲這是默認的帳戶,在IIS 6下運行的應用程序池和7

一般有兩種方法在asp.net應用程序來模擬:

  1. web.config中的<同一性/>標記
  2. 更改應用程序池的在IIS

B中的身份這些選擇中的其中一個都是全球性的,並且會影響每一個請求

但是,它聽起來像你想模仿每個登錄用戶的Windows身份驗證用戶。如果是這樣,請參閱This MS Knowledgebase article for sample code - 具體是標題爲的部分模擬代碼中的特定用戶

2

因此,您所看到的是代表團問題。身份不會自動在IIS之外自動流動。

如果您已經配置了Windows身份驗證的所有內容,那麼您需要打開數據庫打開的調用以暫時將Windows身份用於Web應用程序之外的上下文。代碼如下所示

using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate()) 
{ 
    // Perform database or network access here 
} 

你可能想在支票着眼於當前標識來包裝這並確保它的Windows標識