欢迎您访问我爱IT技术网,今天小编为你分享的电脑教程是网络协议方面的经验知识教程:HTTP与Tcp协议下双工通信的差异分析,下面是详细的分享!
HTTP与Tcp协议下双工通信的差异分析
WCF中经常会使用HTTP协议与Tcp协议来实现双工通讯,对应使用的协议分别为WsDualHttpBinding、NetTcpBinding。
HTTP是基于应用层的协议,而Tcp是基于传输层的协议。Tcp经过三次握手建立起客户端到服务端的可靠连接,发起请求的客户端与回调客户端的服务端都使用一个连接就能完成。使用HTTP协议时,从客户端到服务端发起请求到服务端返回给客户端回复完成后,连接就关闭。
由于HTTP的这种无连接性,基于WsDualHttpBinding的双工在进行通讯时实际上服务端在回调客户端时,会与NetTcpBinding在使用上有些差异。
1、NetTcpBinding实现双工
1.1契约部分:
1.1.1 契约接口定义:
[ServiceContract(CallbackContract=typeof(ICallback))]
public interface ICalculator
{
[OperationContract]
void Add(double x, double y);
}
1.1.2 回调接口定义:
public interface ICallback
{
[OperationContract]
void Display(double x, double y , double result);
}
1.2服务实现:
public void Add(double x, double y)
{
Console.WriteLine("开始Add计算");
ICallback callback=OperationContext.Current.GetCallbackChannel
callback.Display(x, y, x + y);
Console.WriteLine(string.Format("{0},{1}", x, y));
}
服务通过OperationContext.Current.GetCallbackChannel
public T GetCallbackChannel
{
if ((this.channel !=null) && !this.IsUserContext)
{
return (T) this.channel.Proxy;
}
return default(T);
}
1.3 服务端配置:
1.4 客户端部分:
回调接口的实现:
public void Display(double x, double y, double result)
{
Console.WriteLine(string.Format("{0}+{1}={2}", x, y, result));
}
客户端配置:
接口调用:
InstanceContext context=new InstanceContext(new CallBack());
using (var channelFactory=new DuplexChannelFactory
{
ICalculator proxy=channelFactory.CreateChannel();
proxy.Add(1.0, 2.0);
Console.ReadLine();
}
结果如下图:
服务端:

客户端:

2、WsDualHttpBinding实现双工。
操作系统:XP SP3。IIS版本:5.1
同样以上面的契约为例.在数据包、或者请求-响应模式中,如果更换协议一般只需更改所使用的绑定即可。我们将客户端配置改为如下:
然后使用calculatorWsDual重新生成ChannelFactory:
using (var channelFactory=new DuplexChannelFactory
运行调试:有如下异常:

解决办法为Endpoint配置绑定行为,如下:
这样,问题就得以解决
作者 tyb1222
以上就是关于HTTP与Tcp协议下双工通信的差异分析的网络协议知识分享,更多电脑教程请移步到>>电脑教程。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
