本文demo已上传至github:xinyuehtx/WCFdemo
这个博客会介绍如何设置服务操作的调用模式
WCF的服务调用有3种模式:请求答复模式(Request-Repley),单向模式(One-Way),双工模式(Duplex)
请求答复模式
请求答复模式的服务调用方式如如所示,这也是服务的默认行为。
如图所示我们创建了服务协定IRequestResponse
,并且定义了方法SayHello
和,他们使用OperationContractAttribute
的默认构造指定,表明这个方法是请求答复模式。
接着我们完成其余部分。
这个例子和上一篇的HelloWorld并无差别。
但是细心的同学已经发现,请求答复模式的答复去哪儿了?
因为我们的方法是void
方法,没有返回值。
现在我们添加另一个方法SayHello2
并且返回一个字符串
我们现在尝试将返回值进行输出
结果如图所示
这个时候又有一些细心的小伙伴发现问题了,我们在客户端调用服务的方式是一个同步方法。
那么服务端的计算和通信延迟势必会造成客户端卡顿
默认的WCF通信超时是1min,我们尝试在服务实现中添加延时
好糟心~~那么上面的void
方法总没事了吧。我们继续做实验
这次在SayHello
这个void
方法中添加延时
失败++
小结
我们研究了WCF服务的请求答复模式,其特点有
- 简单
- 可以获得返回值
- 是同步方法,有超时风险
问题解决方案
那么对于那些耗时服务,出现的超时问题该怎么解决呢?
- 采用尽量简短的服务计算功能,大量计算任务建议移动至客户端
- 对于没有同步执行要求的
void
方法,可以尝试单向模式
- 对于没有同步执行要求的非
void
方法,可以尝试异步服务
而单向模式
和异步服务
可以在之后的博客中进行介绍
参考链接:
本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/wcf%E5%85%A5%E9%97%A8-3.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。