一直以为感觉双工没弄懂,着实觉得很惆怅,在网上了解下双工的一些特点,直接上代码,以便以后项目中用的着:

service层:

定义一个IDuplexHello服务接口
[ServiceContract(
Name = "DuplexHello",
Namespace = "http://microsoft.wcf.documentation",
CallbackContract = typeof(IHelloCallbackContract), //设置回调服务类型
SessionMode = SessionMode.Required
)]
public interface IDuplexHello
{
[OperationContract]
void Hello(string greeting);
}
实现DuplexHello.cs

public class DuplexHello : IDuplexHello
{
public void Hello(string greeting)
{
Console.WriteLine("Caller sent: " + greeting);
Console.WriteLine("Session ID: " + OperationContext.Current.SessionId);
Console.WriteLine("Waiting two seconds before returning call.");
Thread.Sleep(2000);
var callerProxy
= OperationContext.Current.GetCallbackChannel<IHelloCallbackContract>();
var response = "Service object " + this.GetHashCode().ToString() + " received: " + greeting;
Console.WriteLine("Sending back: " + response);
callerProxy.Reply(response);
}
}
 定义回调接口(回调服务函数没有必要添加servicecontract,因为人家是包含在IDuplexHello服务类型中的)
public interface IHelloCallbackContract
{
[OperationContract(IsOneWay = true)] //一定要记得添加operationcontract
void Reply(string responseToGreeting);
}
这里的回调接口实现类(HelloCallbackContract.cs)我是直接在service层实现的,当然在项目里面肯能大多数情况下都是在客服端实现,我这里也就为了方便啦
public class HelloCallbackContract : IHelloCallbackContract
{
public void Reply(string responseToGreeting)
{
Console.WriteLine(responseToGreeting);
}
}

将service寄宿到控制台应用程序中(用的都是代码实现):

private static void Main(string[] args)
{
using (var host = new ServiceHost(typeof (DuplexHello),
new Uri("http://localhost:991/DuplexHello"))) //添加基地址,在client就是这个地址,另外端口号不能鱼双工端口号相同
{
host.AddServiceEndpoint(typeof (IDuplexHello),
new NetTcpBinding(),
"net.tcp://localhost:999/DuplexHello");
var metadatbehavior =
host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (metadatbehavior == null)
{
metadatbehavior = new ServiceMetadataBehavior()
{
HttpGetEnabled = true
};
host.Description.Behaviors.Add(metadatbehavior);
}
host.Opened += delegate
{
Console.WriteLine("服务已经启动");
};
host.Open();
Console.Read();
}

client层使用的也是一个控制台应用程序:

首先要运行宿主(找到host层资源文件夹bin->debug  :host.exe)在更新wcf服务的时候也必须要先运行host.exe,否则会出现无法连接到服务器错误,

然后添加服务引用中地址栏输入http://localhost:991/DuplexHello 应用服务

再后应用之后客户端app.config自动生成如下代码:

<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_DuplexHello" />
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://localhost:999/DuplexHello"
binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_DuplexHello"
contract="ServiceReference1.DuplexHello"
name="NetTcpBinding_DuplexHello">
<identity>
<userPrincipalName value="objectboy-PC\objectboy" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>

客服端控制台应用程序中代码:

private static void Main(string[] args)
{
var hellocallbackcontract =
new HelloCallbackContract();
var instanceContext =
new InstanceContext(hellocallbackcontract); //实例化客服端类服务上下文
var duplexChannelFactory =
new DuplexChannelFactory<IDuplexHello>(instanceContext,
new NetTcpBinding()); //实例化双工通道,并绑定为tcp通信,注意不能用ChannelFactory,因为这是双工
var endpointaddress =
new EndpointAddress("net.tcp://localhost:999/DuplexHello");
var proxy =
duplexChannelFactory.CreateChannel(endpointaddress); //创建并将消息发送到指定的消息通道
using (proxy as IDisposable)
{
proxy.Hello("cccccccccccccccccc");
}
Console.Read();
}

客服端输出:

服务端输出:

wcf双工通信的更多相关文章

  1. Wcf 双工通信的应用

    概述 双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工ME ...

  2. WCF 双工通信

    注释:本学习是参考Artech大神的资料: 在WCF 实现双工通信 在这里我就不介绍双工通信的概念了,我写博客的目的是检测自己掌握情况,看我wcf通信后,觉得纸上得来终觉浅,绝知此事要躬行. 我使用的 ...

  3. WCF双工通信笔记

    1,Dupex(双工) MEP(消息交换模式),服务端回调(Callback)客户端操作 2,客户端调用服务时,附加上一个回调对象(InstanceContext).服务端处理服务请求时,通过该回调对 ...

  4. WCF双工通信单工通信

    1.单工模式 单向通信,指通信只有一个方向进行,即从客户端流向服务,服务不会发送响应,而客户端也不会期望会有响应.这种情况下,客户端发送消息,然后继续执行 运行后报错: 2.双工模式 双工模式的特点是 ...

  5. [转载]WCF实现双工通信

    双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...

  6. 我的WCF之旅(3):在WCF中实现双工通信

    双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...

  7. 在WCF中实现双工通信

    双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...

  8. 利用WCF双工模式实现即时通讯

    概述 WCF陆陆续续也用过多次,但每次都是浅尝辄止,以将够解决问题为王道,这几天稍闲,特寻了些资料看,昨晚尝试使用WCF的双工模式实现了一个简单的即时通讯程序,通过服务端转发实现客户端之间的通讯.这只 ...

  9. [SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端

    原文:[SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端 之前开发基于WinForm监控的软件,服务端基于Wcf实现,里面涉及双工模式,在客户端里面,采用心跳包机制保持与服 ...

随机推荐

  1. RK平台images打包细则【转】

    本文转载自;https://blog.csdn.net/wangxueming/article/details/52808739 IMGs打包细节 平台: RK3288 背景: RK3288编译产生了 ...

  2. <J2EE学习笔记>续上次Servlet部分提升内容 以及JSP的内容纲要

    以下全部课件均来自于同济大学刘岩老师的<EnterpriseJavaProgramming> 因为授课语言问题,如果翻译有不正确之处欢迎指正 Section 1. 关于Servlet的部分 ...

  3. SDUT 2133 数据结构实验之栈三:后缀式求值

    数据结构实验之栈三:后缀式求值 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 对于一个基于二元运算符的后缀表示式(基本操作数都是 ...

  4. ss命令能识别的TCP状态的关键字

    [TCP_ESTABLISHED] = "ESTAB",         [TCP_SYN_SENT] = "SYN-SENT",         [TCP_S ...

  5. BZOJ-3940:Censoring(AC自动机裸题)

    Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they have p ...

  6. jsp基本概念

    服务器启动的时候执行初始化init方法,只执行一次 每次请求都会执行一次service方法 服务器停止的时候执行destroy方法,也是只执行一次 <%! //全局变量 int initNum= ...

  7. 【Lintcode】137.Clone Graph

    题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...

  8. hdu 4609 3-idiots —— FFT

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4609 算不合法的比较方便: 枚举最大的边,每种情况算了2次,而全排列算了6次,所以还要乘3: 注意枚举最大 ...

  9. ubuntu14.04 设置默认使用root用户登录

    首先修改/etc/lightdm/lightdm.conf,设置autologin-user=root 但是此时直接重启,会报如下的错误: 解决办法: 使用命令: vim /root/.profile ...

  10. .NETFramework:Random

    ylbtech-.NETFramework:Random 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c ...