silverlight beta2 wcf双向通讯学习记录

1.首先建立一个PollingDuplexHttpBinding对象,该绑定对象用来配置与通信的终节点,设置PollTimeout,还有InactivityTimeout。的时间. 通过PollingDuplexHttpBinding对象,可以建立一个通道工厂

---***--- IChannelFactory<IDuplexSessionChannel> factory = binding.BuildChannelFactory<IDuplexSessionChannel>(new BindingParameterCollection()) ---***---

2.通过上面建立的这个IChannelFactory<IDuplexSessionChannel>工厂对象factory ,使用factory对象的  BeginOpen 开始一个异步操作以打开通信对象。

BeginOpen(AsyncCallback, Object) --参数说明-- AsyncCallback  类型:System.AsyncCallback, 接收异步打开操作完成通知的 AsyncCallback 委托。 Object 类型:System.Object 一个由应用程序指定的对象,它包含与异步打开操作相关联的状态信息。

----------

BeginOpen会返回一个IAsyncResult,用于监视被调用方法执行的进度。 就是说BeginOpen启动异步调用时,打开了一个异步线程,而IAsyncResult就好像是一个哈希表的key,可以靠这个key去得到相应的线程,这样就可以处理多线程而不至于混乱了。 在后面的EndOpen方法,还需要传入IAsyncResult。

---***--- IAsyncResult factoryOpenResult = factory.BeginOpen(new AsyncCallback(OnOpenCompleteFactory), factory); ---***---

3.当BeginOpen操作完成后,通过IAsyncResult的.AsyncState属性得到异步操作对象,就是上面的factory对象。再调用factory对象的EndOpen方法得到异步调用的结果 这里,上面的BeginOpen后,可以随时可以调用EndOpen方法,假如异步调用还没有完成,那么EndOpen会阻塞到异步调用执行完毕

---***--- IChannelFactory<IDuplexSessionChannel> factory =(IChannelFactory<IDuplexSessionChannel>)result.AsyncState;

factory.EndOpen(result);

---***---

4.上面用EndOpen完成一个异步操作以打开通信对象后,开始建立一个通信信道。CreateChannel 用来创建到指定终结点地址的指定类型的通信信道。 建立IDuplexSessionChannel 后,打开这个通信信道和上面打开通信对象factory一样,有BeginOpen和EndOpen

---***--- IDuplexSessionChannel channel = factory.CreateChannel(new EndpointAddress("http://localhost:1419/Service1.svc")); IAsyncResult channelOpenResult = channel.BeginOpen(new AsyncCallback(OnOpenCompleteChannel), channel);

IDuplexSessionChannel channel = (IDuplexSessionChannel)result.AsyncState; channel.EndOpen(result);

---***---

 

未完待续----

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值