<alwaysFlowImpersonationPolicy> 元素
指定 Windows 标识始终流经异步点,而不考虑执行模拟的方式。
configuration
runtime
<alwaysFlowImpersonationPolicy>
语法
<alwaysFlowImpersonationPolicy
enabled="true|false"/>
特性和元素
下列各节描述了特性、子元素和父元素。
特性
属性 | 描述 |
---|---|
enabled |
必需的特性。 指示 Windows 标识是否跨异步点流动。 |
enabled 特性
值 | 说明 |
---|---|
false |
Windows 标识不会流经异步点,除非通过 Impersonate 等托管方法执行模拟标识。 这是默认值。 |
true |
Windows 标识始终流经异步点,而不考虑执行模拟的方式。 |
子元素
无。
父元素
元素 | 说明 |
---|---|
configuration |
公共语言运行时和 .NET Framework 应用程序所使用的每个配置文件中的根元素。 |
runtime |
包含有关程序集绑定和垃圾回收的信息。 |
注解
在 .NET Framework 1.0 和 1.1 版本中,Windows 标识不会跨流经异步点。 在 .NET Framework 2.0 版本中,有一个 ExecutionContext 对象包含有关当前正在执行的线程的信息,并跨应用程序域中的异步点流动。 WindowsIdentity 也作为流经异步点的信息的一部分流动,前提是模拟是使用 Impersonate 等托管方法实现的,而不是通过对本机方法的平台调用等其他方式实现的。 此元素用于指定 Windows 标识确实跨异步点流动,而不管模拟是如何实现的。
可以通过其他两种方式更改此默认行为:
在基于每个线程的托管代码中。
通过使用 ExecutionContext.SuppressFlow、SecurityContext.SuppressFlowWindowsIdentity 或 SecurityContext.SuppressFlow 方法修改 ExecutionContext 和 SecurityContext 设置,可以在每个线程的基础上抑制流。
在对非托管托管接口的调用中加载公共语言运行时 (CLR)。
如果使用非托管托管接口(而不是简单的托管可执行文件)来加载 CLR,可以在对 CorBindToRuntimeEx Function 函数的调用中指定一个特殊标志。 若要为整个过程启用兼容模式,请将 CorBindToRuntimeEx 函数的
flags
参数设置为STARTUP_ALWAYSFLOW_IMPERSONATION
。
配置文件
在 .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>
<alwaysFlowImpersonationPolicy enabled="true"/>
</runtime>
</configuration>