.NET模拟.NETFramework 2 VS .NETFrameWork 4中的ASP.NET模拟

我们在.NetFramework 2中有一个ASP.NET站点(在IIS 7.5中使用App Pool 2 Classic),我们使用Basic AuthenticateForm Authenticate混合身份Form Authenticate

IIS中的配置是:

在此处输入图像描述

并且匿名身份validation中的特定用户名为: Guest

当用户使用Admin等其他用户名登录时,我们使用模拟:

 string Token = GetSpecificTokenOfCurrentUser(); System.Security.Principal.WindowsIdentity WinUser = (WindowsIdentity) HttpContext.Current.Application["User_"+Token]; WinUser.Impersonate(); 

所以每一件事都是完美的,直到我们将网站升级到.NetFramework 4并在.NET 4中添加很多function到网站,我们认为我们有一个新的问题。

问题是用户使用Admin登录并同时打开一些页面(3-4),就像在新标签中快速打开一样,用户在某些情况下不会被模拟。 就像第一个页面正确模拟Admin但另一个页面没有模仿,仍然有Guest用户。

这太奇怪了,我们在身份validation部分没有任何变化。 更改是我们升级到.NetFrameWork 4和App Pool是.NetFrameWork 4 – Classic。

我们在.Net 2版网站上进行了测试。 一切都很好,但我们将App Pool更改为.NetFrameWork 4并显示问题。

那么问题是.NetFramework 4 App Pool对Impersonate发生了什么变化?

我们错过了什么? 有什么建议吗?

我找到了一些要点:

1-多请求的行为类似于并行处理,正如您在经典模式中所知,我们对并行性有一些限制。

2-在集成模式下,我们在Impersonate Enable中有一些限制。 Enable Impersonate的默认行为是500.24错误: Internal Server Error An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode"如果我们想要启用模拟我们需要添加 web.config中的 ,所以我们没有得到错误,但钢铁我们有另一个限制。模仿命令在Begin_RequestAuthenticateRequest方法中Begin_Request ,其他任何工作Begin_Request完美。

在这种情况下,IIS 7.0上以集成模式运行的ASP.NET 2.0应用程序的重大更改是非常好的文章。

所以解决方案是

移至集成模式(需要添加标记)并在任何其他方法中使用Impersonate而不是Begin_RequestAuthenticateRequest