使用 CallContext
调用上下文提供了一组用执行代码路径传送的属性。当 CallContext 类沿着执行代码路径上下移动时,可以向它的实例添加项。
当 CallContext 对象在上下文与应用程序域之间流动时,它将在“__CallContext”项(类型为 LogicalCallContext)的 IMessage 实现中传递。当它通过消息接收链时,消息接收器可以在 __CallContext 中添加和查找项。
调用上下文在应用程序域边界被克隆。公开 ILogicalThreadAffinative 接口的对象被传播到应用程序域外部并被添加到接收方的线程中。不支持此接口的对象不会被传播到应用程序域外部。
CallContext 为调用路径提供数据槽。CallContext.SetData 和 CallContext.GetData 可用于管理应用程序代码中的调用上下文槽。每一调用路径都有唯一的数据槽;也就是说,调用路径之间不共享状态。这些数据槽是命名过的。名称用于访问数据槽。使用该名称可以显式地释放数据槽。
有关使用 CallContext 的远程处理示例,请参见远程处理示例:CallContext。
BeginInvoke 方法将 CallContext 传递给服务器。当 EndInvoke 方法被调用时,CallContext 将合并回线程中。这包括按顺序调用 BeginInvoke 和 EndInvoke 以及在一个线程上调用 BeginInvoke 而在回调函数上调用 EndInvoke 这两种情况。
当 CallContext 项为当前线程上的 CallContext 和由 EndInvoke 提供的 CallContext 所共有时,EndInvoke 中的项将改写线程上的 CallContext 中的项。
上下文相关的静态字段提供与上下文相关的字段。每当从特定的上下文访问静态字段时,此值将与该上下文相关;该字段不在不同上下文之间共享。如果在另一个上下文中访问该静态字段,该字段将包含一个不同的值。
要使用上下文相关的静态字段,只需将 ContextStaticAttribute 属性应用于 ContextBoundObject 对象上的一个字段。