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 ...
随机推荐
- Nhiberate (二) 搭项目
使用: visual studio 2015 ;SQL SERVER 2012. 参考.测试可用 其中有点不太一样的地儿, ISession 的泛型方法: 用了 QueryOver<>,转 ...
- LUA 函数式编程demo
什么是函数式编程 http://www.zhihu.com/topic/19585411/hot 函数式编程的本质函数式编程中的函数这个术语不是指计算机中的函数(实际上是Subroutine),而是指 ...
- C++之路进阶——codevs2439(降雨量)
2439 降雨量 2007年省队选拔赛四川 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description 我们常常会说这样的话 ...
- asp检测数字类型函数
'**************************************************'函数ID:0014[检测ID是否为数字类型]'函数名:JCID'作 用:检测ID是否为数字类型' ...
- jQuery----函数和选择器
1. $(document).ready 几乎所有的jQuery代码都是以如下方式开始的 $(document).ready(function() { Do something }); $(docum ...
- 关于ebox
看了介绍,觉得挺不错的东西,希望能够一路走下去 老话题STM32编程,新思路,一样是编程,味道却大有不同.这就是STM32之eBox编程.让你提议不一样的编程,让开发快到你意想不 ...
- [Effective JavaScript 笔记]第7章:并发--个人总结
前言 这一章的内容学到了事件队列和异步的API.js只是运行在其他应用程序的脚本语言.js即依赖于应用程序,也独立与应用程序.可以使它可以在多平台,多种环境上运行.ECMAScript标准中没有关于并 ...
- JuQueen(线段树 lazy)
JuQueen Time Limit: 5 Sec Memory Limit: 512 MB Description Input Output Sample Input 10 10 5 state ...
- (转)Could not create the view: An unexpected exception was thrown. 电脑突然断电,myeclipse非正常关闭,出现错误
问题:电脑突然断电,myeclipse非正常关闭,“Package Explorer”非正常显示,出现错误“Could not create the view: An unexpected excep ...
- ggplot2.multiplot:将多个图形使用GGPLOT2在同一页上
一页多图 介绍 ggplot2.multiplot是一个易于使用的功能,将多个图形在同一页面上使用R统计软件和GGPLOT2绘图方法.这个功能是从easyGgplot2包. 安装并加载easyGgpl ...