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

2019-1-28-wcf入门(7)

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

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

这个博客会介绍如何设置服务的实例化


实例化(Instance)

2019-1-27-wcf入门(6) - huangtengxiao中介绍会话时,我们已经接触过实例化。

如图所示,当时我们在服务实现上设置了一个ServiceBehavior,并且指定InstanceContextModePerSession。确保整个会话的生命周期内,只使用服务类的单个实例。

还是使用上一篇博客中会话的demo。我们试着为InstanceContextMode设置不同的选项。

我们首先设置为PerCall

结果如图所示

我们发现除了会话启动方法以外,其余方法都丢失了客户端的name

我们看下注释:“新的InstanceContext对象在每次调用前创建,在调用后回收。如果信道未创建会话,则该值的行为就如同InstanceContextMode.PerCall”一样

这个注释说明了两件事情:

  • 设置为PerCall时,每次调用服务端的方法,都会新创建一个服务实例。我们在创建会话方法传入name的实例,随着方法调用的结束而销毁。后续的方法都是使用的新实例。
  • 这个注释的后半句是错误的,应该是属于PerSession的内容。可以参见InstanceContextMode Enum (System.ServiceModel) - Microsoft Docs。即在未启用会话时,PerSessionPerCall的行为时一致的。

那么对于Single呢?WCF中Single表示整个服务的生命周期内,使用同一个实例

我们再做个试验,将InstanceContextMode 设置为Single,并且将_name = name改为_name += name

我们看到第二个会话中客户端的name被拼接了

什么是实例化

实例化是一种服务行为设置,控制服务对象的创建和释放。

我们可以通过实例化控制服务端状态的使用(例如和会话结合,或者创建单例服务)

小结

我们研究了WCF服务的实例化,其特点有

  • 可以有PerCall,PerSession,Single三种选择
  • 可以在服务端留存状态

参考链接:


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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实例化(Instance)
    • 什么是实例化
      • 小结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档