更新2
这个问题最初是“模仿是否适用于Web API?”
对这个问题的问题是“是的,确实如此”.
但问题不在于Web API,而在于模仿本身. (问题的描述如下)
但现在我想告诉其他人解决方案.
我的控制器是异步的,我错误的前提是模拟线程产生的任何线程都与其父线程具有相同的身份.
默认情况下为false:TPL不会跨线程进行模拟.
模拟流程可以启用programmatically or in configuration.
请注意,应该对aspnet.config文件进行更改,而不是对应用程序的web.config进行更改.
正如this post所述,每个应用程序池都可以设置aspnet.config文件.
this post安德鲁亲切地提供了关于更详细的整个任务的链接.
对于那些第一次打开模拟的人,我想要注意IIS 7.5有一个非常好的功能来输入模拟帐户的凭据.配置文件中不需要这些凭据,只能写入.
<identity impersonate="true"/>
原始问题:
我转而模仿并提供了用户凭据.
<identity impersonate="true" usernName="foo" password="bar"/>
但是当我通过Entity Framework连接到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上托管应用程序