HTTP与Tcp协议下双工通信的差异
public interface ICalculator
{
[OperationContract]
void Add(double x, double y);
}
{
[OperationContract]
void Display(double x, double y , double result);
}
{
Console.WriteLine("开始Add计算");
ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();
callback.Display(x, y, x + y);
Console.WriteLine(string.Format("{0},{1}", x, y));
}
{
if ((this.channel != null) && !this.IsUserContext)
{
return (T) this.channel.Proxy;
}
return default(T);
}
1.3 服务端配置:
<services>
<service name="Services.CalculatorServices">
<endpoint address="Calaulator" binding="netTcpBinding" contract="Contract.ICalculator"></endpoint>
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:6688"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
{
Console.WriteLine(string.Format("{0}+{1}={2}", x, y, result));
}
<client>
<endpoint address="net.tcp://127.0.0.1:6688/Calaulator" binding="netTcpBinding" contract="Contract.ICalculator" name="calculatorTcp"></endpoint>
</client>
</system.serviceModel>
using (var channelFactory = new DuplexChannelFactory<ICalculator>(context, "calculatorTcp"))
{
ICalculator proxy = channelFactory.CreateChannel();
proxy.Add(1.0, 2.0);
Console.ReadLine();
}
客户端:
2、WsDualHttpBinding实现双工。
<client>
<endpoint address="http://127.0.0.1:8866/Calaulator/ws" binding="wsDualHttpBinding" contract="Contract.ICalculator" name="calculatorWsDual" ></endpoint>
</client>
</system.serviceModel>
然后使用calculatorWsDual重新生成ChannelFactory:
<bindings>
<wsDualHttpBinding>
<binding name ="myWsDualBinding" clientBaseAddress="http://127.0.0.1:3636/Service/CallbackService"></binding>
</wsDualHttpBinding>
</bindings>
<client>
<endpoint address="http://127.0.0.1:8888/Service/Calculator" binding="wsDualHttpBinding" contract="Contracts.ICalculator" name="calculatorService" bindingConfiguration="myWsDualBinding"/>
</client>
</system.serviceModel>
这样,问题就得以解决