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>
这样,问题就得以解决
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具