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

2019-1-24-wcf入门(3)

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

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

这个博客会介绍如何设置服务操作的调用模式


WCF的服务调用有3种模式:请求答复模式(Request-Repley),单向模式(One-Way),双工模式(Duplex)

请求答复模式

1548303202564
1548303202564

请求答复模式的服务调用方式如如所示,这也是服务的默认行为。

1548316960915
1548316960915

如图所示我们创建了服务协定IRequestResponse,并且定义了方法SayHello和,他们使用OperationContractAttribute的默认构造指定,表明这个方法是请求答复模式。

接着我们完成其余部分。

1548317233972
1548317233972
1548317248284
1548317248284
1548317660812
1548317660812

这个例子和上一篇的HelloWorld并无差别。

但是细心的同学已经发现,请求答复模式的答复去哪儿了?

因为我们的方法是void方法,没有返回值。

现在我们添加另一个方法SayHello2并且返回一个字符串

1548318170453
1548318170453
1548318185658
1548318185658
1548318203769
1548318203769

我们现在尝试将返回值进行输出

1548318227405
1548318227405

结果如图所示

1548318104714
1548318104714

这个时候又有一些细心的小伙伴发现问题了,我们在客户端调用服务的方式是一个同步方法。

那么服务端的计算和通信延迟势必会造成客户端卡顿

默认的WCF通信超时是1min,我们尝试在服务实现中添加延时

1548318581498
1548318581498
1548318756643
1548318756643

好糟心~~那么上面的void方法总没事了吧。我们继续做实验

这次在SayHello这个void方法中添加延时

1548318891613
1548318891613

失败++

1548318958781
1548318958781

小结

我们研究了WCF服务的请求答复模式,其特点有

  • 简单
  • 可以获得返回值
  • 是同步方法,有超时风险

问题解决方案

那么对于那些耗时服务,出现的超时问题该怎么解决呢?

  1. 采用尽量简短的服务计算功能,大量计算任务建议移动至客户端
  2. 对于没有同步执行要求的void方法,可以尝试单向模式
  3. 对于没有同步执行要求的非void方法,可以尝试异步服务

单向模式异步服务可以在之后的博客中进行介绍

参考链接:


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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 请求答复模式
    • 小结
      • 问题解决方案
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档