日期:2014-05-17  浏览次数:21220 次

WCF,请教一下双工
   最近在学习WCF,感觉对双工理解还不够透彻。在网上看到过这一点,就是服务端向客户端发送一个通知就可以使用WCF双工,否则客户端可能需要使用轮询才能实现。
   然后,又在菜园里搜索了一些WCF的文章,看了一些关于WCF双工的示例,基本上都是从客户端调用一个WCF服务,然后在调用服务的过程中再调用客户端回调。怎么看来所有的动作,由始至终其实都是由客户端引发的。
   那个所谓的服务端向客户端独立发送一个通知的WCF双工,到底是怎么做的呢?

------解决方案--------------------
这是WCF里面定义了一些内置参数做为调用客户端方法的标识而已。
说白了就是让我们省去了Socket的编程。

服务器 →通知运行方法A→ 客户端 这样客户端就开始执行方法了。

------解决方案--------------------
说白了就是把客户端当成服务器端,服务器端当成客户端,再建立一个信道。

http://download.csdn.net/detail/caozhy/5287998
------解决方案--------------------
http://www.cnblogs.com/wpfworld/category/530339.html
看这个吧,一个WCF聊天系统实例。
在客户端连接到服务端以后,服务端可以在任意时刻,主动连接客户端进行消息的推送等等
也就是双工操作

------解决方案--------------------
引用:
说白了就是把客户端当成服务器端,服务器端当成客户端,再建立一个信道。

http://download.csdn.net/detail/caozhy/5287998

你确定是再建立一个信道?客户端端口外网如何访问?难道要TCP打洞?
这个应该是利用已经存在的TCP连接(只有一个信道),不关闭的情况下,客户端一直等待服务端是否有消息过来,而不是请求服务端。因此如果客户端和服务器的连接异常断开,那么双工通信就此终止,可信度不能保证,还要做个心跳包定时检测连接状态,连接端口的话重连。这样的开销不如客户端直接轮询服务端的消息队列更实在,双工通信会浪费服务器的大量TCP连接,导致服务器负担加重。
------解决方案--------------------
错别字纠正:连接端口的话重连-->连接断开的话重连
此外,双工通信还不能用在http协议上面,因此不利于服务的扩展,弊大于利,不推荐去学。
------解决方案--------------------
引用:
Quote: 引用:

说白了就是把客户端当成服务器端,服务器端当成客户端,再建立一个信道。

http://download.csdn.net/detail/caozhy/5287998

你确定是再建立一个信道?客户端端口外网如何访问?难道要TCP打洞?
这个应该是利用已经存在的TCP连接(只有一个信道),不关闭的情况下,客户端一直等待服务端是否有消息过来,而不是请求服务端。因此如果客户端和服务器的连接异常断开,那么双工通信就此终止,可信度不能保证,还要做个心跳包定时检测连接状态,连接端口的话重连。这样的开销不如客户端直接轮询服务端的消息队列更实在,双工通信会浪费服务器的大量TCP连接,导致服务器负担加重。


我说的信道是Channel,对于支持双工通讯的协议,比如tcp,共享一个连接,对于不支持的协议,比如http,需要2个连接。
------解决方案--------------------
WCF双工很简单的,就是帮定事件,然后由客户端通知服务器回调事件而已。。。如果要服务器自发,那你加点代码。。。
------解决方案--------------------
WCF一般有三种通信模式
1单发
2请求/回复
3双工
1是客户端用Output发送,服务端用Input来接收,
 发送方将消息发给接收方,不要求从接方得到回复消息.这就完成了  
2是客户端用Requset发送,服务端用Recieve接收,收到后还要再发个回复消息,等客户端收到,就完成了.
3双工是客户端有个Output和Input ,服务端也有个Output和Input ,这样它们就能相互发送和接收了,
理论上就是这样,具体操作看代码创建什么样的信道
比如:服端创建了Iutput ,客户端创建了Output那只能是单发.
    服端创建了Duplex(继承了Input和output) ,客户端也创建了Duplex就能对发对接了.
------解决方案--------------------
这方面看着我也得去多了解下,我只知道双工通信的调用机制是相互联系的,对应的。
------解决方案--------------------
引用:
Quote: 引用:

这是WCF里面定义了一些内置参数做为调用客户端方法的标识而已。
说白了就是让我们省去了Socket的编程。

服务器 →通知运行方法A→ 客户端 这样客户端就开始执行方法了。