WCF,请教一下双工

wcf201 2014-01-18 05:08:44
最近在学习WCF,感觉对双工理解还不够透彻。在网上看到过这一点,就是服务端向客户端发送一个通知就可以使用WCF双工,否则客户端可能需要使用轮询才能实现。
然后,又在菜园里搜索了一些WCF的文章,看了一些关于WCF双工的示例,基本上都是从客户端调用一个WCF服务,然后在调用服务的过程中再调用客户端回调。怎么看来所有的动作,由始至终其实都是由客户端引发的。
那个所谓的服务端向客户端独立发送一个通知的WCF双工,到底是怎么做的呢?
...全文
278 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
破碎的脸 2014-01-20
  • 打赏
  • 举报
回复
引用 11 楼 u013511144 的回复:
[quote=引用 9 楼 jhkemail 的回复:] WCF双工很简单的,就是帮定事件,然后由客户端通知服务器回调事件而已。。。如果要服务器自发,那你加点代码。。。
要服务器自发,那要加点代码?加什么代码呢?会不会服务端也是一个winform,然后手动引发呢[/quote] 是可以的。。。
CinQOnline1 2014-01-20
  • 打赏
  • 举报
回复
引用 2 楼 u013511144 的回复:
[quote=引用 1 楼 CinQOnline1 的回复:] 这是WCF里面定义了一些内置参数做为调用客户端方法的标识而已。 说白了就是让我们省去了Socket的编程。 服务器 →通知运行方法A→ 客户端 这样客户端就开始执行方法了。
我看到的网上示例都是这样的: 客户端→(服务端)调用服务,同时通知运行方法A→客户端, 其实从开始就是由客户端引发的一系列动作啊,你说的那种直接由服务端开始引发的动作,是怎么做的呢?[/quote] 只要建立了连接,服务器就能对客户端引发动作。这就是双工,道理和SOCKET一样,如果你要学习WCF原理需要学一下SOCKET。
arSavior 2014-01-20
  • 打赏
  • 举报
回复
这方面看着我也得去多了解下,我只知道双工通信的调用机制是相互联系的,对应的。
wcf201 2014-01-19
  • 打赏
  • 举报
回复
引用 6 楼 qldsrx 的回复:
错别字纠正:连接端口的话重连-->连接断开的话重连 此外,双工通信还不能用在http协议上面,因此不利于服务的扩展,弊大于利,不推荐去学。
阁下说的"不推荐去学",指的是什么呢,是不推荐学双工吗,还是其它意思?如果不学双工,那学什么呢?
qldsrx 2014-01-19
  • 打赏
  • 举报
回复
错别字纠正:连接端口的话重连-->连接断开的话重连 此外,双工通信还不能用在http协议上面,因此不利于服务的扩展,弊大于利,不推荐去学。
qldsrx 2014-01-19
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
说白了就是把客户端当成服务器端,服务器端当成客户端,再建立一个信道。 http://download.csdn.net/detail/caozhy/5287998
你确定是再建立一个信道?客户端端口外网如何访问?难道要TCP打洞? 这个应该是利用已经存在的TCP连接(只有一个信道),不关闭的情况下,客户端一直等待服务端是否有消息过来,而不是请求服务端。因此如果客户端和服务器的连接异常断开,那么双工通信就此终止,可信度不能保证,还要做个心跳包定时检测连接状态,连接端口的话重连。这样的开销不如客户端直接轮询服务端的消息队列更实在,双工通信会浪费服务器的大量TCP连接,导致服务器负担加重。
wcf201 2014-01-19
  • 打赏
  • 举报
回复
引用 9 楼 jhkemail 的回复:
WCF双工很简单的,就是帮定事件,然后由客户端通知服务器回调事件而已。。。如果要服务器自发,那你加点代码。。。
要服务器自发,那要加点代码?加什么代码呢?会不会服务端也是一个winform,然后手动引发呢
Ptrtoptr 2014-01-19
  • 打赏
  • 举报
回复
WCF一般有三种通信模式 1单发 2请求/回复 3双工 1是客户端用Output发送,服务端用Input来接收, 发送方将消息发给接收方,不要求从接方得到回复消息.这就完成了 2是客户端用Requset发送,服务端用Recieve接收,收到后还要再发个回复消息,等客户端收到,就完成了. 3双工是客户端有个Output和Input ,服务端也有个Output和Input ,这样它们就能相互发送和接收了, 理论上就是这样,具体操作看代码创建什么样的信道 比如:服端创建了Iutput ,客户端创建了Output那只能是单发. 服端创建了Duplex(继承了Input和output) ,客户端也创建了Duplex就能对发对接了.
破碎的脸 2014-01-19
  • 打赏
  • 举报
回复
WCF双工很简单的,就是帮定事件,然后由客户端通知服务器回调事件而已。。。如果要服务器自发,那你加点代码。。。
threenewbee 2014-01-19
  • 打赏
  • 举报
回复
引用 5 楼 qldsrx 的回复:
[quote=引用 3 楼 caozhy 的回复:] 说白了就是把客户端当成服务器端,服务器端当成客户端,再建立一个信道。 http://download.csdn.net/detail/caozhy/5287998
你确定是再建立一个信道?客户端端口外网如何访问?难道要TCP打洞? 这个应该是利用已经存在的TCP连接(只有一个信道),不关闭的情况下,客户端一直等待服务端是否有消息过来,而不是请求服务端。因此如果客户端和服务器的连接异常断开,那么双工通信就此终止,可信度不能保证,还要做个心跳包定时检测连接状态,连接端口的话重连。这样的开销不如客户端直接轮询服务端的消息队列更实在,双工通信会浪费服务器的大量TCP连接,导致服务器负担加重。[/quote] 我说的信道是Channel,对于支持双工通讯的协议,比如tcp,共享一个连接,对于不支持的协议,比如http,需要2个连接。
小猪八Q 2014-01-18
  • 打赏
  • 举报
回复
http://www.cnblogs.com/wpfworld/category/530339.html 看这个吧,一个WCF聊天系统实例。 在客户端连接到服务端以后,服务端可以在任意时刻,主动连接客户端进行消息的推送等等 也就是双工操作
threenewbee 2014-01-18
  • 打赏
  • 举报
回复
说白了就是把客户端当成服务器端,服务器端当成客户端,再建立一个信道。 http://download.csdn.net/detail/caozhy/5287998
wcf201 2014-01-18
  • 打赏
  • 举报
回复
引用 1 楼 CinQOnline1 的回复:
这是WCF里面定义了一些内置参数做为调用客户端方法的标识而已。 说白了就是让我们省去了Socket的编程。 服务器 →通知运行方法A→ 客户端 这样客户端就开始执行方法了。
我看到的网上示例都是这样的: 客户端→(服务端)调用服务,同时通知运行方法A→客户端, 其实从开始就是由客户端引发的一系列动作啊,你说的那种直接由服务端开始引发的动作,是怎么做的呢?
CinQOnline1 2014-01-18
  • 打赏
  • 举报
回复
这是WCF里面定义了一些内置参数做为调用客户端方法的标识而已。 说白了就是让我们省去了Socket的编程。 服务器 →通知运行方法A→ 客户端 这样客户端就开始执行方法了。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧