WCF双向通信,心跳
Q Q:408365330 E-Mail:egojit@qq.com
WCF中双程操作。这里主要介绍心跳技术。
每当客户端给服务端发送消息时,服务端在接收到消息后,给客户端反馈一条消息(称为回调操作),而这个反馈消息不需要考虑客户端是否收到这个反馈消息。
本文介绍一个简单例子,例子展示如何实现服务端与客户端的交互。
一、服务端
首先写服务契约
.[ServiceContract(CallbackContract = typeof(IWCFServiceCallBack))]
.public interface IWCFService
.{
. //操作契约
. [OperationContract]
. string OprT(string name);
.}
注:
CallbackContract= typeof(IWCFServiceCallBack)表示服务端接收到客户端的消息时给客户的响应(即回调操作),IWCFServiceCallBack即为回调契约,定义如下:
.public interface IWCFServiceCallBack
.{
. //操作契约
. [OperationContract(IsOneWay = true)]
. void FeedBack(string info);
.}
注:
1.回调服务契约,由于回调方法在客户端执行,因此无须添加 ServiceContract特性。
2.对于成功后回调反馈操作,服务器无须获取其返回信息,因此添加 IsOneWay=true 特性。
接着,服务端实现契约:
.public class WCFService : IWCFService
.{
. //获取当前操作客户端对象实例
. IWCFServiceCallBack callback
. = OperationContext.Current.GetCallbackChannel<IWCFServiceCallBack>();
. //实现接口定义的方法(在服务端运行)
. public string OprT(string clientPCName)
. {
. Console.WriteLine("收到客户端的连接消息消息:{0} {1}", DateTime.Now, clientPCName);
. callback.FeedBack("进过分析后的用户名" + clientPCName.Split('-')[]);
. //这边可以返回任何客户端需要的信息//如果客户端不需要信息可以将此函数设为void返回类型
. return "客户端连接正常";
. }
.}
二、宿主,主要工作就是开启服务
配置文件如下:
01.<?xml version="1.0" encoding="utf-8" ?>
02.<configuration>
03. <system.serviceModel>
04. <services>
05. <service behaviorConfiguration="WCFService.WCFServiceBehavior"
06. name="Service0413.WCFService">
07. <endpoint
08. address="net.tcp://localhost:9000/WCFService"
09. binding="netTcpBinding"
10. contract="Service0413.IWCFService">
11. </endpoint>
12. <host>
13. <baseAddresses>
14. <!--这里的baseAddress是客户端服务引用的URI-->
15. <add baseAddress="http://localhost:9090/"/>
16. </baseAddresses>
17. </host>
18. </service>
19. </services>
20. <behaviors>
21. <serviceBehaviors>
22. <behavior name="WCFService.WCFServiceBehavior">
23. <!--为了可以通过URI引用服务,这里需设置httpGetEnabled为true-->
24. <serviceMetadata httpGetEnabled="true" />
25. <serviceDebug includeExceptionDetailInFaults="false" />
26. </behavior>
27. </serviceBehaviors>
28. </behaviors>
29. </system.serviceModel>
30.</configuration>
寄宿宿主:
01.//服务宿主就干一件事:打开服务
02.class Host
03.{
04. static void Main(string[] args)
05. {
06. //回调服务WCFServiceCallBack
07. ServiceHost host = new ServiceHost(typeof(Service0413.WCFService));
08. try
09. {
10. //判断是否以及打开连接,如果尚未打开,就打开侦听端口
11. if (host.State != CommunicationState.Opening)
12. host.Open();
13. //显示运行状态
14. Console.WriteLine("ServiceHost is runing! and state is {0}", host.State);
15. Console.Read();
16. }
17. catch (Exception ex)
18. {
19. Console.WriteLine(ex.ToString());
20. }
21. finally
22. {
23. host.Close();
24. }
25. }
26.}
三、客户端:
首先要实现回调的契约接口(通俗点将就是服务端接收到客户端消息后给客户端发聩信息,在客户端执行):
./// <summary>要实现回调的契约接口
./// </summary>
.public class WCFCallback : Service2012.IWCFServiceCallback
.{
. public void FeedBack(string info)
. {
. Console.WriteLine("服务器已经收到您的消息!消息内容:" + info);
. }
.}
最后是入口函数部分
.public class Client
. {
. //获得客户端的计算机名(实际可以扩展到获取客户端的一切想要的数据)
. private static string clientName = Environment.MachineName;
. private static Service2012.IWCFServiceCallback callBack = new WCFCallback();
. private static InstanceContext context = new InstanceContext(callBack);
. private static Service2012.WCFServiceClient WCFServiceCallBackClientProxy =
. new WCFServiceClient(context, "NetTcpBinding_IWCFService");
. static void Main(string[] args)
. {
. System.Timers.Timer timer = new System.Timers.Timer();
. //绑定定期自动执行的操作
. timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
. timer.Enabled = true;
. string s=Console.ReadLine();
. Console.WriteLine(s);
. }
. private static void OnTimedEvent(object source, ElapsedEventArgs e)
. {
. string operateInfo = WCFServiceCallBackClientProxy.OprT(clientName);
. Console.WriteLine(operateInfo);
. }
. }
至此完成,本例没有进行异常处理,请注意先运行服务端,再运行客户端。
WCF双向通信,心跳的更多相关文章
- WCF 项目应用连载[3] - 双向通信 实例管理与服务端监控
WCF 项目应用连载[1] - 索引 - 轻量级的Log系统 - Lig Sample -序 第二节我们已经创建了Lig项目,并且能稳定工作了.现在我们来改进ILigAgent接口,实现WCF的双向通 ...
- WCF心跳判断服务端及客户端是否掉线并实现重连接
WCF心跳判断服务端及客户端是否掉线并实现重连接 本篇文章将通过一个实例实现对WCF中针对服务端以及客户端是否掉线进行判断:若掉线时服务器或客户端又在线时将实现自动重连:将通过WCF的双工知识以及相应 ...
- WCF学习之旅—TCP双工模式(二十一)
WCF学习之旅—请求与答复模式和单向模式(十九) WCF学习之旅—HTTP双工模式(二十) 五.TCP双工模式 上一篇文章中我们学习了HTTP的双工模式,我们今天就学习一下TCP的双工模式. 在一个基 ...
- 利用WCF的双工通讯实现一个简单的心跳监控系统
何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...
- WCF入门教程3——WCF通信模式
本章内容 请求/响应模式 单工模式 双工模式 WCF异步调用 请求与响应模式 请求/响应 请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应.这也意味着在接收到服务的响应以前 ...
- 用.NET MVC实现长轮询,与jQuery.AJAX即时双向通信
两周前用长轮询做了一个Chat,并移植到了Azure,还写了篇博客http://www.cnblogs.com/indream/p/3187540.html,让大家帮忙测试. 首先感谢300位注册用户 ...
- [WCF编程]11.错误:错误契约
一.错误传播 服务需要向客户端报告特定错误,当WCF默认的错误屏蔽方法并不包含这一实现.另一个重要的问题与传播到客户端有关,即由于异常是针对特定技术的,因此无法跨越服务边界而被共享.要实现无缝的互操作 ...
- [WCF编程]10.操作:回调操作
一.回调操作概述 WCF支持服务将调用返回给它的客户端.在回调期间,许多方面都将颠倒过来:服务将成为客户端,客户端将编程服务.回调操作可以用在各种场景和应用程序中,但在涉及事件或者服务发生时间需要通知 ...
- WCF service 获取 client 端的 IP 和 port (转)
转帖记录一下,以便日后使用. 主要使用是.NET3.5里的服务端上下文的消息实例的RemoteEndpointMessageProperty属性,获取客户端地址信息.但是限制 的绑定是HTTP.TCP ...
随机推荐
- join用法
join命令可以将多个文件结合在一起,每个文件里的每条记录,都共享一个键值(key),键值指的是记录中的主字段,通常会是用户名称.个人姓氏.员工编号之类的数据. join - join lines o ...
- pthread_attr_setdetachstate
pthread_create函数可以指定新创建线程的属性. pthread_attr_setdetachstate() set detach state attribute in thread at ...
- bzoj1458 士兵占领
费用流,连下面几类边 1.s->s',流量为n*m,费用为0,表示最多可放置n*m个士兵 2.s'->行 (1)流量为a[i],费用为-n*m,表示必须在这一行放置a[i]个士兵. (2) ...
- AJAX-----07XMLHttpRequest对象的处理返回的JSON类型数据
要玩json首先就需要知道一般都数据是怎么处理的: <!DOCTYPE html> <html lang="en"> <head> <me ...
- [Zend]设置ZendStudio编辑器配色
首先,菜单栏–help–install new software… 接着,添加一个更新源,就是点击界面的add按钮,在新窗口的location位置输入http://eclipse-color-them ...
- ruby on rails on windows
这次想系统学会rails,最终目标是将redmine改造成顺手的工具,主要的手段就是开发redmine插件.虽然网上都推荐使用类Unix系统,可手头只有win7系统,就安装了. 难免会遇到这样那样的问 ...
- ASCII编码表
最初的编码:ASCII 补充: ASCII表是适用于美国的,共128位:ISO-8859-1是适用于欧洲的,共256位 :GB2312是适用于中文系统的:UTF-8是万国码,适用于绝大部分语言:ANS ...
- 配置jsp开发环境
一.安装jdk(http://pan.baidu.com/s/1sjk9a2p) 二.配置java环境变量 安装好后,配置环境变量:计算机——右击——属性——高级系统设置设置——环境变量 系统变量(没 ...
- mongodb 安装、开启服务 和 php添加mongodb扩展
1.下载mongodb:https://www.mongodb.org/downloads#production (https://www.mongodb.org/dl/win32) 2.安装.配置 ...
- Count Primes - LeetCode
examination questions Description: Count the number of prime numbers less than a non-negative number ...