C# .NETFramework 2与.NETFramework 4中的ASP.NET模拟
我们在.NetFramework 2中有一个ASP.NET站点(在IIS 7.5中有App Pool 2 Classic),我们使用混合身份验证和C# .NETFramework 2与.NETFramework 4中的ASP.NET模拟,c#,asp.net,authentication,impersonation,.net-framework-version,C#,Asp.net,Authentication,Impersonation,.net Framework Version,我们在.NetFramework 2中有一个ASP.NET站点(在IIS 7.5中有App Pool 2 Classic),我们使用混合身份验证和基本身份验证和表单身份验证 IIS中的配置为: 并在匿名身份验证中指定特定用户:Guest 当用户使用另一个用户名(如Admin登录时,我们使用模拟: string Token = GetSpecificTokenOfCurrentUser(); System.Security.Principal.WindowsIdentity WinUser =
基本身份验证
和表单身份验证
IIS中的配置为:
并在匿名身份验证中指定特定用户:Guest
当用户使用另一个用户名(如Admin
登录时,我们使用模拟:
string Token = GetSpecificTokenOfCurrentUser();
System.Security.Principal.WindowsIdentity WinUser = (WindowsIdentity) HttpContext.Current.Application["User_"+Token];
WinUser.Impersonate();
所以一切都是完美的,直到我们将网站升级到.NETFramework4,并在.NET4中为网站添加了许多功能,我们发现我们遇到了一个新问题
问题是用户使用Admin
登录并同时打开一些页面(3-4),就像在新选项卡中快速打开一样,在某些情况下用户不会模拟。与正确模拟到Admin
的第一个页面类似,但另一个页面未模拟,仍然有Guest
用户
这太奇怪了,我们在身份验证部分没有任何更改。更改是我们升级到.netframework4,应用程序池是.netframework4-Classic
我们在.NET2版本的网站上进行了测试。一切正常,但我们将应用程序池更改为.netframework4,问题就出现了
因此,问题是.NetFramework 4应用程序池中发生了哪些要模拟的更改
我们错过了什么吗?有什么建议吗?我发现了一些要点:
1-多请求的行为类似于并行处理,正如您所知,在经典模式下,我们对并行性有一些限制
2-在集成模式下,我们在模拟
启用方面有一些限制。启用模拟的默认行为是500.24错误:内部服务器错误检测到ASP.NET设置不适用于集成托管管道模式“
如果我们想启用模拟,我们需要将
添加到web.config中的
,这样就不会出现错误,但我们还有另一个限制。在Begin\u Request
和AuthenticateRequest
方法中,模拟命令不起作用,其他任何方法都能很好地工作
在这种情况下,这是一篇很好的文章
所以解决办法是
移动到集成模式(需要添加标签)并在任何其他方法中使用模拟,而不是Begin\u Request
或AuthenticateRequest