Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NETFramework 2与.NETFramework 4中的ASP.NET模拟_C#_Asp.net_Authentication_Impersonation_.net Framework Version - Fatal编程技术网

C# .NETFramework 2与.NETFramework 4中的ASP.NET模拟

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 =

我们在.NetFramework 2中有一个ASP.NET站点(在IIS 7.5中有App Pool 2 Classic),我们使用混合身份验证和
基本身份验证
表单身份验证

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