ASP.NET WebAPI中的模拟和异步

时间:2013-08-13 12:10:34

标签: .net entity-framework asp.net-web-api impersonation

更新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"/>

输入凭据后,它们将自动添加到配置文件中。

enter image description here enter image description here

原始问题:

我开始模仿并提供用户凭据。

<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=&quot;data source=...;initial catalog=...;Trusted_Connection=Yes;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我在Win2008 Srv,IIS 7.5上托管应用程序

1 个答案:

答案 0 :(得分:4)

正如answer解释的那样; web.config中的模拟会覆盖应用程序池中的标识。

在我看来,有一个很好的解释here使用哪个:假冒或应用程序池