Remoting服务实例
Remoting服务实例
由于最近开始接触Remoting项目,所以特意学习了一下,写了一篇简要的实例分享,加深一遍对Remoting服务框架的理解,个人觉得它的原理就是分布式的调用远程主机上的类库,在不同机器上的应用程序域之间建立通道,使用可序列化的远程对象传递数据。
github链接
1. 远程对象代码
public class HelloData:MarshalByRefObject
{/// <summary>/// 服务名称/// </summary>public static string ObjectURI { get { return "HellURI"; } }/// <summary>/// 给客户端调用的接口/// </summary>/// <param name="name"></param>/// <returns></returns>public string Greeting(string name){return "您好!" + DateTime.Now.ToLongTimeString();}/*创建发送消息委托*/public delegate void SendMessageHandler(string messge);/*创建发送消息事件*/public static event SendMessageHandler SendMessageEvent;/*发送消息*/public void SendMessage(string messge){if (SendMessageEvent != null)SendMessageEvent("Client Send"+messge);}
}
2. 服务端代码
static void Main(string[] args)
{bool isStart = false;bool isStop = false;Console.WriteLine("Server,Please input num: 1(start),2(stop)");while (true){string inputStr = Console.ReadLine();if (inputStr == "1"){if (!isStart){isStart = true;isStop = false;//创建通信侦听通道对象TcpServerChannel channel = new TcpServerChannel("HelloChannel",8086);//注册通信侦听通道ChannelServices.RegisterChannel(channel, true);//注册对象URI, 注册远程对象RemotingConfiguration.RegisterWellKnownServiceType(typeof(HelloData), HelloData.ObjectURI, WellKnownObjectMode.SingleCall);/*接收客户端事件*/HelloData.SendMessageEvent += new HelloData.SendMessageHandler(ServerSendMessageEvent);Console.WriteLine("服务器已启动!");}}else{if (!isStop){isStart = false;isStop = true;IChannel[] channels = ChannelServices.RegisteredChannels;//关闭指定名为MyTcp的通道;foreach (IChannel eachChannel in channels){if (eachChannel.ChannelName == "HelloChannel"){TcpChannel tcpChannel = (TcpChannel)eachChannel;//关闭监听;tcpChannel.StopListening(null);//注销通道;ChannelServices.UnregisterChannel(tcpChannel);}}}}}
}
static void ServerSendMessageEvent(string messge)
{Console.WriteLine(messge);
}
3. 客户端代码
static void Main(string[] args)
{Console.WriteLine("Client,Please input num: 1(Connect),2(DisConnect)");string inputStr = Console.ReadLine();if(inputStr=="1"){//注册客户端通信通道ChannelServices.RegisterChannel(new TcpClientChannel(), true);try{HelloData obj = (HelloData)Activator.GetObject(typeof(HelloData),"tcp://localhost:8086/" + HelloData.ObjectURI);if (obj == null){Console.WriteLine("找不到服务器!");return;}while (true){string returnStr = obj.Greeting(" Server Return String! ");Console.WriteLine(returnStr);obj.SendMessage("DateTime.Now:" + System.DateTime.Now.ToString());Console.WriteLine("send message...");Thread.Sleep(500);}}catch (Exception ex){Console.WriteLine(ex.Message);}}Console.ReadLine();
}
4. 参考资料
- Microsoft .Net Remoting 系列教程
- .Net Remoting 学习笔记
Remoting服务实例相关推荐
- WCF服务实例激活类型编程与开发(转)
[引言]: 在WCF分布式开发必备知识(2):.Net Remoting这 篇文章里我已经介绍过了Net Remoting相关的概念,其中也包括Net Remoting的激活方式:SingleTon模 ...
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[上篇](转)...
http://www.cnblogs.com/artech/archive/2009/11/05/1596925.html 服务调用的目的体现在对某项服务功能的消费上,而功能的实现又定义在相应的服务类 ...
- Exchange2000需要创建的3个SMTP服务实例
前一阵搞了邮件系统的安全加固,前面说的SA是一个方面,总觉得在SMTP上还有文章可做. 分析一下公司的系统环境,SMTP的访问大概分这么三类: 1.来自客户端的访问. 2.来自公司业务系统服务器的访问 ...
- tomcat 部署 RESTful 服务实例
1.建立简单restfule服务 参考:java 利用JAX-RS快速开发RESTful 服务实例 简单代码: package com.example;import javax.ws.rs.GET; ...
- 通过ribbon 根据服务名获取所有服务实例的IP和端口列表
代码使用SpringCloud版本E3 业务场景: 今天遇到一个业务场景,要求根据服务名获取当前微服务集群中所有的对应服务实例的IP和端口,通过分析源码推算出了写法. 原理简述: 如果代码中引入了sp ...
- C#实现Windows后台服务实例浅析
2019独角兽企业重金招聘Python工程师标准>>> C#实现Windows后台服务实例之前要明白的一些概念:所谓Windows后台服务,即后台自动运行的程序,一般随操作系统启动而 ...
- .NET Remoting开发系列:(三) Remoting服务发布方式
Remoting服务发布方式? 使用应用程序发布 这个在第一篇就已经讲了. 通过Windows服务发布 通过IIS发布 通过Windows服务发布Remoting 首先我们要建立一个WindowsSe ...
- 关于 Angular 服务实例作用域的问题 - 使用组件限定服务提供者的作用域
官方链接 一种限定提供者作用域的方式是把要限定的服务添加到组件的 providers 数组中.组件中的提供者和 NgModule 中的提供者是彼此独立的. 当你要急性加载一个自带了全部所需服务的模块时 ...
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[中篇]
在[第1篇]中,我们介绍了WCF关于实例管理一些基本的知识点,包括InstanceContext.InstanceContextMode.已经如何通过ServiceBehaviorAttribute应 ...
- WCF - 服务实例管理模式
WCF 提供了三种实例上下文模式:PreCall.PreSession 以及 Single.开发人员通过 ServiceBehavior.InstanceContextMode 就可以很容易地控制服务 ...
最新文章
- 【Verilog HDL 训练】第 14 天(glitch-free的两个时钟切换电路)
- DataTable分页控件设计(适用于Gridview和Repeater)
- JAVA中字符串连接效率的测试(续)
- java三元操作符注意
- 《大数据》2015年第3期“网络大数据专题”——大数据时代的互联网分析引擎...
- ProjectEuler 2
- linux查看进程中的线程名,linux 怎么样查看一个进程的线程
- FPGA跨时钟域异步时钟设计的几种同步策略
- 【干货】无人机如何进行倾斜摄影的航线规划
- Python 使用Protobuf(struct模块)
- WebLogic如何设置session超时时间
- vj p1041神风堂人数 题解
- selenium的三种等待方式
- 【超简便的Python】 提取两个列表的共同元素
- 【Codeforces 869 C The Intriguing Obsession】 组合数学 思维
- javaEye上对于南京软件公司的讨论
- 分析家C语言接口软件,大智慧分析家 c语言 编程接口
- MQ延迟队列实现延迟消息
- matlab毕达哥拉斯质数,“毕达哥拉斯-史仲夏”常用勾股数组表
- 黑客攻击无孔不入:连电影字幕都能被入侵
热门文章
- db2查看数据库端口
- CMake下载 (大全?)(建议配合迅雷使用)(盲下)
- 如何通过 SSH 连接到 Docker 容器
- Visio画图,空间太小,画不下
- 字体转换,woff,ttf,otf,eot,svg
- python的基本函数图像_python绘制基本初等函数图像
- 柳神(柳婼)PAT甲级题目链接
- springboot在线银行贷款系统毕业设计源码281444
- 经典c语言笔试题及答案,C语言经典笔试题
- java 解析dex_将DEX反编译成Java源代码