关于OperationContext类

今天在学习WCF的时候,看到了这个没有接触过的类,于是就在MSDN上面学习了一下。下面是相关的总结。

MSDN参考:

OperationContext

GetCallbackChannel(Of T)

Current

 

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

 

重要属性:

OperationContext.Current

作用:获取或设置当前线程的执行上下文。使用 Current 属性获取当前方法的执行和消息上下文。

笔记:关于线程上下文的讨论。 Current属性的主要作用在于获取或设置当前线程的上下文,根据之前的一个“讨论”链接,我个人觉得,应该是获取之前一次此线程执行过程中的内容,设置当前线程以及之后再次执行的当前线程。应该类似于保证当前所操作的内容,就是我所需要的内容,而不是“前一个其他线程”所执行的内容。毕竟不同线程的执行,可能产生的结果很多。

 

重要方法:

OperationContext.GetCallbackChannel(Of T)

作用:获取调用当前操作的客户端实例的通道。调用 GetCallbackChannel(Of T) 属性以获取通道,使用该通道可以调用调用服务的客户端实例的操作。

笔记:调用此方法的目的,在于得到调用“当前操作”的“客户端实例”的通道。使用这个通道调用“调用服务的客户端实例”的操作,也就是调用一个客户端实例的某一个操作。配合Current属性,可以理解为获取上一次当前进程执行过程中,所用到的那条通道。

 

案例:

下面的代码示例使用 Current 属性和 GetCallbackChannel(Of T) 方法获取从方法中返回调用方的通道。 此示例中的所有方法都是单向方法,使服务和客户端能够独立地进行双向通信。 在此情况下,示例客户端应用程序在退出前仅需要一次返回调用,但其他客户端(例如 Windows 窗体客户端)可以接收来自服务的任意数量的调用。

using   System;
using   System . Collections . Generic;
using   System . ServiceModel;
using   System . Threading;

namespace   Microsoft . WCF . Documentation
{
    [ ServiceContract (
        Name   =   " SampleDuplexHello " ,
10         Namespace   =   " http://microsoft.wcf.documentation " ,
11         CallbackContract   =   typeof ( IHelloCallbackContract ) ,
12         SessionMode   =   SessionMode . Required
13     ) ]
14     public   interface   IDuplexHello
15     {
16         [ OperationContract ( IsOneWay   =   true ) ]
17         void   Hello ( string   greeting ) ;
18     }
19
20     public   interface   IHelloCallbackContract
21     {
22         [ OperationContract ( IsOneWay   =   true ) ]
23         void   Reply ( string   responseToGreeting ) ;
24     }
25
26     public   class   DuplexHello   :   IDuplexHello
27     {
28         public   DuplexHello ( )
29         {
30             Console . WriteLine ( " Service   object   created:   "   +   this . GetHashCode ( ) . ToString ( ) ) ;
31         }
32
33         ~DuplexHello ( )
34         {
35             Console . WriteLine ( " Service   object   destroyed:   "   +   this . GetHashCode ( ) . ToString ( ) ) ;
36         }
37
38         public   void   Hello ( string   greeting )
39         {
40             Console . WriteLine ( " Caller   sent:   "   +   greeting ) ;
41             Console . WriteLine ( " Session   ID:   "   +   OperationContext . Current . SessionId ) ;
42             Console . WriteLine ( " Waiting   two   seconds   before   returning   call. " ) ;
43             //   Put   a   slight   delay   to   demonstrate   asynchronous   behavior   on   client.
44             Thread . Sleep ( 2000 ) ;
45             IHelloCallbackContract   callerProxy
46                 =   OperationContext.Current.GetCallbackChannel<IHelloCallbackContract>();
47             string   response   =   " Service   object   "   +   this . GetHashCode ( ) . ToString ( )   +   "   received:   "   +   greeting;
48             Console . WriteLine ( " Sending   back:   "   +   response ) ;
49             callerProxy . Reply ( response ) ;
50         }
51     }
52 }

转载于:https://www.cnblogs.com/skyler/archive/2011/10/19/2217463.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值