<alwaysFlowImpersonationPolicy> 元素
指定无论如何执行模拟,Windows 标识始终在异步点之间流动。
<配置>
<运行时>
<alwaysFlowImpersonationPolicy>
语法
<alwaysFlowImpersonationPolicy
enabled="true|false"/>
属性和元素
以下部分介绍属性、子元素和父元素。
属性
属性 | 描述 |
---|---|
enabled |
必需属性。 指示 Windows 标识是否跨异步点流动。 |
enabled Attribute
价值 | 描述 |
---|---|
false |
除非模拟是通过托管方法(如 Impersonate)执行的,否则 Windows 标识不会流经异步点。 这是默认值。 |
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 函数 函数时指定特殊标志。 若要为整个进程启用兼容性模式,请将 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>