.NET模拟.NETFramework 2 VS .NETFrameWork 4中的ASP.NET模拟
我们在.NetFramework 2中有一个ASP.NET站点(在IIS 7.5中使用App Pool 2 Classic),我们使用Basic Authenticate
和Form 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_Request
和AuthenticateRequest
方法中Begin_Request
,其他任何工作Begin_Request
完美。
在这种情况下,IIS 7.0上以集成模式运行的ASP.NET 2.0应用程序的重大更改是非常好的文章。
所以解决方案是
移至集成模式(需要添加标记)并在任何其他方法中使用Impersonate而不是Begin_Request
或AuthenticateRequest
。