<legacyImpersonationPolicy> 元素
指定无论当前线程上的执行上下文的流设置如何,Windows 标识都不会跨异步点流动。
<配置>
<运行时>
<legacyImpersonationPolicy>
语法
<legacyImpersonationPolicy
enabled="true|false"/>
属性和元素
以下部分介绍属性、子元素和父元素。
属性
属性 | 描述 |
---|---|
enabled |
必需属性。 指定无论当前线程上的 ExecutionContext 流设置如何,WindowsIdentity 都不会流过异步点。 |
enabled Attribute
价值 | 描述 |
---|---|
false |
WindowsIdentity 流跨异步点的流,具体取决于当前线程的 ExecutionContext 流设置。 这是默认值。 |
true |
WindowsIdentity 不会流过异步点,而不考虑当前线程上的 ExecutionContext 流设置。 |
子元素
没有。
父元素
元素 | 描述 |
---|---|
configuration |
公共语言运行时和 .NET Framework 应用程序使用的每个配置文件中的根元素。 |
runtime |
包含有关程序集绑定和垃圾回收的信息。 |
言论
在 .NET Framework 版本 1.0 和 1.1 中,WindowsIdentity 不会流过任何用户定义的异步点。 从 .NET Framework 版本 2.0 开始,有一个 ExecutionContext 对象,其中包含有关当前正在执行的线程的信息,并且它跨应用程序域中的异步点流动。 WindowsIdentity 包含在此执行上下文中,因此还流经异步点,这意味着如果模拟上下文存在,也会流动。
从 .NET Framework 2.0 开始,可以使用 <legacyImpersonationPolicy>
元素指定 WindowsIdentity 不会流过异步点。
注意
公共语言运行时(CLR)知道仅使用托管代码执行的模拟作,而不是通过平台调用非托管代码或通过直接调用 Win32 函数之外执行的模拟作。 只有托管 WindowsIdentity 对象可以跨异步点流动,除非 alwaysFlowImpersonationPolicy
元素已设置为 true(<alwaysFlowImpersonationPolicy enabled="true"/>
)。 将 alwaysFlowImpersonationPolicy
元素设置为 true 指定无论如何执行模拟,Windows 标识始终在异步点之间流动。 有关跨异步点流动非托管模拟的详细信息,请参阅 <alwaysFlowImpersonationPolicy> Element。
可以通过其他两种方式更改此默认行为:
在每线程的托管代码中。
可以使用 ExecutionContext.SuppressFlow、SecurityContext.SuppressFlowWindowsIdentity 或 SecurityContext.SuppressFlow 方法修改 ExecutionContext 和 SecurityContext 设置,从而按线程禁止流。
在调用非托管宿主接口以加载公共语言运行时(CLR)。
如果使用非托管托管接口(而不是简单的托管可执行文件)加载 CLR,则可以在调用 CorBindToRuntimeEx 函数 函数时指定特殊标志。 若要为整个进程启用兼容性模式,请将 CorBindToRuntimeEx 函数 的
flags
参数设置为 STARTUP_LEGACY_IMPERSONATION。
有关详细信息,请参阅 <alwaysFlowImpersonationPolicy> Element。
配置文件
在 .NET Framework 应用程序中,此元素只能在应用程序配置文件中使用。
对于 ASP.NET 应用程序,可以在 <Windows 文件夹>\Microsoft.NET\Framework\vx.x.xxxx 目录中找到的 aspnet.config 文件中配置模拟流。
默认情况下,ASP.NET 使用以下配置设置禁用 aspnet.config 文件中的模拟流:
<configuration>
<runtime>
<legacyImpersonationPolicy enabled="true"/>
<alwaysFlowImpersonationPolicy enabled="false"/>
</runtime>
</configuration>
在 ASP.NET 中,如果要允许模拟流,则必须显式使用以下配置设置:
<configuration>
<runtime>
<legacyImpersonationPolicy enabled="false"/>
<alwaysFlowImpersonationPolicy enabled="true"/>
</runtime>
</configuration>
例
以下示例演示如何指定不跨异步点流动 Windows 标识的旧行为。
<configuration>
<runtime>
<legacyImpersonationPolicy enabled="true"/>
</runtime>
</configuration>