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 ...
随机推荐
- dubbo源码分析1-reference bean创建
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...
- Latex 分段函数
Latex里面分段函数的输入: \begin{equation} P_{r-j}= \begin{cases} 0&\mbox{if $r-j$ is odd}\\ ...
- C#窗体WinForm 文件操作
文件及文件夹操作 C/S:WinForm可以操作客户端文件 Client ServerB/S:浏览器服务 Brower Server 命名空间:using system .IO; 1. File类:文 ...
- jQ HTML之捕获 设置 元素添加与删除
捕获 设置修改 添加元素 删除元素
- 分列:将excel单元格的内容拆分为两列
提要:处理excel数据时有时需要把单元格的内容拆分为两列,可能方便外部软件的链接,可能使数据显示更明晰等等,有人说直接剪切加粘贴不就可以了吗,但是有时数据过多,这样处理很不效率,网上搜索的方法说插入 ...
- 2016年4月1日下午,《java入门123》翻开了第一页,从此走上不归路。新手初来乍到,献上见面礼
package copyfile; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream ...
- 一、Docker之旅
刚刚接触到docker的同事可能会一头雾水,docker到底是一个什么东西,先看看官方的定义. Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔 ...
- bat 自动编译运行
@echo off g++ %1 -Wall -Wextra --std=c++98 -O3 -DNDEBUG -D_NDEBUG -D_GLIBCXX_NO_ASSERT ^ -U_STLP_DEB ...
- netstat命令详解
它主要的用法和详解! (netstat -na 命令),本文主要是说Linux下的netstat工具,然后详细说明一下各种网络连接状态. netstat -nat |awk ‘{print $}’|s ...
- Web页面速度测试工具
开发框架的时间,想测试单例和多例下对性能的影响,找了下没有特别简单易用的测试工具. 估摸着搞了一个小工具. 针对.net Framework的2.0,3.5,4.0版本. WebHttpTest2.0 ...