wcf双工通信
一直以为感觉双工没弄懂,着实觉得很惆怅,在网上了解下双工的一些特点,直接上代码,以便以后项目中用的着:
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双工通信的更多相关文章
- Wcf 双工通信的应用
概述 双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工ME ...
- WCF 双工通信
注释:本学习是参考Artech大神的资料: 在WCF 实现双工通信 在这里我就不介绍双工通信的概念了,我写博客的目的是检测自己掌握情况,看我wcf通信后,觉得纸上得来终觉浅,绝知此事要躬行. 我使用的 ...
- WCF双工通信笔记
1,Dupex(双工) MEP(消息交换模式),服务端回调(Callback)客户端操作 2,客户端调用服务时,附加上一个回调对象(InstanceContext).服务端处理服务请求时,通过该回调对 ...
- WCF双工通信单工通信
1.单工模式 单向通信,指通信只有一个方向进行,即从客户端流向服务,服务不会发送响应,而客户端也不会期望会有响应.这种情况下,客户端发送消息,然后继续执行 运行后报错: 2.双工模式 双工模式的特点是 ...
- [转载]WCF实现双工通信
双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...
- 我的WCF之旅(3):在WCF中实现双工通信
双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...
- 在WCF中实现双工通信
双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...
- 利用WCF双工模式实现即时通讯
概述 WCF陆陆续续也用过多次,但每次都是浅尝辄止,以将够解决问题为王道,这几天稍闲,特寻了些资料看,昨晚尝试使用WCF的双工模式实现了一个简单的即时通讯程序,通过服务端转发实现客户端之间的通讯.这只 ...
- [SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端
原文:[SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端 之前开发基于WinForm监控的软件,服务端基于Wcf实现,里面涉及双工模式,在客户端里面,采用心跳包机制保持与服 ...
随机推荐
- <密码学入门>关于RSA算法的加密解密及代码实现
RSA算法 是一种公钥加密算法,RSA算法相比别的算法思路非常清晰,但是想要破解的难度非常大.RSA算法基于一个非常简单的数论事实:两个素数相乘得到一个大数很容易,但是由一个大数分解为两个素数相乘却非 ...
- SPOJ - PHRASES Relevant Phrases of Annihilation —— 后缀数组 出现于所有字符串中两次且不重叠的最长公共子串
题目链接:https://vjudge.net/problem/SPOJ-PHRASES PHRASES - Relevant Phrases of Annihilation no tags You ...
- 算法(Algorithms)第4版 练习 1.3.25 1.3.24
代码实现: //1.3.24 /** * remove the node following the node x * (and does nothing if the argument or the ...
- PYTHON 爬虫笔记五:BeautifulSoup库基础用法
知识点一:BeautifulSoup库详解及其基本使用方法 什么是BeautifulSoup 灵活又方便的网页解析库,处理高效,支持多种解析器.利用它不用编写正则表达式即可方便实现网页信息的提取库. ...
- Linux-Yum服务器搭建
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载 ...
- (1)Java多线程编程核心——Java多线程技能
1.为什么要使用多线程?多线程的优点? 提高CPU的利用率 2.什么是多线程? 3.Java实现多线程编程的两种方式? a.继承Thread类 public class MyThread01 exte ...
- js 阿拉伯数字转转汉字
js:(单纯的转汉字,没有个.十.千.万,待我日后完善) var number = 323413290907; var N = [ "零", "一", &quo ...
- 1095 Cars on Campus (30)(30 分)
Zhejiang University has 6 campuses and a lot of gates. From each gate we can collect the in/out time ...
- BZOJ_2111_[ZJOI2010]Perm 排列计数_树形DP+组合数学
Description 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic ...
- BZOJ2467五角形生成树——数学
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2467 可以得出只需在每个五角形中去掉任意一条边,在某个五角形中去掉包括内边的两条边即可. 代码 ...