更新 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 上托管应用程序