0

最近我在 SO 上阅读了以下帖子

根据该线程的同事的说法,仅通过捕获引用(有或没有 OperationContextScope 的帮助)从另一个线程引用 OperationContext.Current 是安全的。

我的问题是:这是真的吗?我可以看到 OperationContext 的许多一次性成员。根据一个非常简单的测试 - 参考从线程池排队线程中捕获的 OpertionContext - IncomingMessageHeaders 之类的值消失了(被释放并且不再有效)。

从请求线程中获取所需的内容并且不依赖于操作上下文的生命周期及其属性不是更安全吗?

4

1 回答 1

2

基本上,来自Msdn 文章

使用服务操作中的 OperationContext 访问 当前操作执行环境。特别是,操作上下文用于访问双工服务中的回调通道、跨部分操作存储额外的状态数据、访问传入消息头和属性以及添加传出消息头和属性。

这个

OperationContext – 此类表示运行时为每个操作收集的操作信息。这包括诸如传入消息头、传入消息属性、传入安全身份和其他信息之类的信息。此类的扩展可以扩展 OperationContext 的行为或存储每个操作的状态。

我认为您可以获得一些服务配置,允许您访问 OperationContext 值(使用服务的实例管理、服务模式等)。但是——在这种情况下,如果你的服务实例模式将来会改变——你可以破坏所有的功能,建立在这个假设上。

我同意您的观点,并且更愿意自己处理状态值(何时以及如果需要)。

于 2013-05-28T08:48:30.623 回答