我发现只有一个与此相关的帖子,但它没有回答这个问题.
我很想知道在web.config中设置模拟用户与在IIS中设置应用程序池标识之间的区别的链接或解释.他们似乎是独立的,并且对细节差异感到困惑.谢谢.
更新2
这个问题最初是"模拟与Web API一起工作吗?"
这个问题的问题是"是的,确实如此".
但问题不在于Web API,而在于模仿本身.(问题的描述如下)
但现在我想告诉其他人解决方案.
我的控制器是异步的,我错误的前提是模拟线程产生的任何线程都与其父线程具有相同的身份.
默认情况下为false:TPL不会跨线程进行模拟.
可以通过编程或配置启用模拟流.
请注意,应该对aspnet.config文件进行更改,而不是对应用程序的web.config进行更改.
正如这篇文章所述,每个应用程序池都可以设置aspnet.config文件.
而这篇文章的链接,恳请提供安德鲁讲述更详细的整体追求.
对于那些第一次打开模拟的人,我想要注意IIS 7.5有一个非常好的功能来输入模拟帐户的凭据.配置文件中不需要这些凭据,仅写入是很麻烦的.
<identity impersonate="true"/>
Run Code Online (Sandbox Code Playgroud)
输入凭据后,它们将自动添加到配置文件中.

原始问题:
我转而模仿并提供用户凭据.
<identity impersonate="true" usernName="foo" password="bar"/>
Run Code Online (Sandbox Code Playgroud)
但是当我通过Entity Framework连接到sql server时,我收到错误"用户{MachineName} $登录失败".那就是EF在IUSR账户下运行.同时WindowsIdentity.GetCurrent()返回'foo'用户的身份.
模拟帐户具有启用Windows身份验证的SQL Server所需的所有权限.
此外,如果我禁用模拟并只设置应用程序池以使用此标识的凭据运行,一切正常.
我无法理解为什么在模拟开启时它不起作用但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" />
Run Code Online (Sandbox Code Playgroud)
我在Win2008 Srv,IIS 7.5上托管应用程序