ASP.NET WebAPI 中的模擬和非同步
更新 2
這個問題最初是“模擬是否適用於 Web API?”
這個問題的問題是“是的,確實如此”。
但問題不在於 Web API,而在於模擬本身。(問題描述如下)
但現在我想告訴其他人解決方案。
我的控制器是非同步的,我的錯誤前提是任何由模擬執行緒產生的執行緒都具有與其父級相同的身份。
預設為 false:TPL 不會跨執行緒進行模擬。
模擬流程可以通過程式方式或配置方式啟用。
請注意,應該對aspnet.config文件而不是應用程序的 web.config 進行更改。
正如這篇文章所述,可以為每個應用程序池設置 aspnet.config 文件。
這篇文章是 Andrew 提供的連結,更詳細地講述了整個任務。
對於那些第一次打開模擬的人,我想指出 IIS 7.5 有一個非常好的功能來輸入模擬帳戶的憑據。配置文件中不需要這些憑據,只需編寫即可。
<identity impersonate="true"/>輸入憑據後,它們將自動添加到配置文件中。
![]()
原始問題:
我打開了模擬並提供了使用者憑據。
<identity impersonate="true" usernName="foo" password="bar"/>但是當我通過實體框架連接到 sql server 時,我收到錯誤“使用者 {MachineName}$ 登錄失敗”。那就是EF在IUSR帳戶下執行。同時
WindowsIdentity.GetCurrent()返回 ‘foo’ 使用者的身份。模擬帳戶在啟用了 Windows 身份驗證的 SQL 伺服器上具有所有需要的權限。
此外,如果我禁用模擬並僅將應用程序池設置為使用此身份的憑據執行,則一切正常。
我不明白為什麼當模擬打開但 AppPool 在預設帳戶下執行時它不起作用。
更新 1
EF 連接字元串是
<add name="PtKbEntities" connectionString="metadata=...;provider=System.Data.SqlClient;provider connection string="data source=...;initial catalog=...;Trusted_Connection=Yes;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />我在 Win2008 Srv、IIS 7.5 上託管應用程序
正如這個答案所解釋的那樣;web.config 中的模擬會覆蓋應用程序池中的標識。
在我看來,這裡有一個很好的解釋:模擬或應用程序池
