前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2019-1-27-wcf入门(6)

2019-1-27-wcf入门(6)

作者头像
黄腾霄
发布2020-06-10 11:45:37
5000
发布2020-06-10 11:45:37
举报
文章被收录于专栏:黄腾霄的博客

本文demo已上传至github:xinyuehtx/WCFdemo

这个博客会介绍如何设置服务的会话


会话(Session)

还记得2019-1-25-wcf入门(5) - huangtengxiao中提到的双工模式么?

大家有没有疑问为什么服务端能够知道该向谁回复消息呢?

有人可能会说因为我们例子里面的TCP是面向连接的。

可是系统提供的WSDualHttpBinding也是支持双工的,但是它的通道是无状态的Http协议

另外对于多个服务操作调用,有时我们需要它们之间有一些状态共用,那么也需要有一个方式将一系列消息关联在一起。

这些情况就需要用到会话。微软官方将会话定义为:在两个终结点之间发送的所有消息的一种相互关系。

会话有显式的启动和终止。在此期间所有的消息都是属于会话的一部分

使用会话

如图所示,使用会话时需要在服务协定设置SeesionMode。对于Required指该服务必须使用会话

此外,还需要选取两个操作,通过IsInitialtingIsTerminating设置会话的启动和终止

在服务实现上,对于SayHello方法,传入客户端的name并且保存为字段。在其后所有的回复中都带上name

注意这里我们还设置了一个ServiceBehavior,并且指定InstanceContextModePerSession。这个是设置整个会话的生命周期内,只使用服务类的单个实例。实例化的具体内容会在后续博客中介绍

我们看下客户端的调用,依次调用会话启动方法,其余方法,会话终止方法。

我们可以看到所有的回复都带上了客户端在会话启动方法传入的name

会话的问题

在WCF中客户端是通过一个通道创建了服务的透明代理。而当会话终止时,相应的通信通道也会关闭。这时候我们如果继续在已经关闭的通道上通信就会引发异常。

当然如下所示的尝试在这个通过再次建立会话也是不可以的。

如果需要重新同服务端通信,则需要再次实例化一个SessionClient

小结

我们研究了WCF服务的会话,其特点有

  • 可以实现一组消息相互关联
  • 需要显示启动和终止
  • 终止后通过会关闭,再次通信需要重新实例化客户端

参考链接:


本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/wcf%E5%85%A5%E9%97%A8-6.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 会话(Session)
  • 使用会话
  • 会话的问题
    • 小结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档