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服务实例相关推荐

  1. WCF服务实例激活类型编程与开发(转)

    [引言]: 在WCF分布式开发必备知识(2):.Net Remoting这 篇文章里我已经介绍过了Net Remoting相关的概念,其中也包括Net Remoting的激活方式:SingleTon模 ...

  2. WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[上篇](转)...

    http://www.cnblogs.com/artech/archive/2009/11/05/1596925.html 服务调用的目的体现在对某项服务功能的消费上,而功能的实现又定义在相应的服务类 ...

  3. Exchange2000需要创建的3个SMTP服务实例

    前一阵搞了邮件系统的安全加固,前面说的SA是一个方面,总觉得在SMTP上还有文章可做. 分析一下公司的系统环境,SMTP的访问大概分这么三类: 1.来自客户端的访问. 2.来自公司业务系统服务器的访问 ...

  4. tomcat 部署 RESTful 服务实例

    1.建立简单restfule服务 参考:java 利用JAX-RS快速开发RESTful 服务实例 简单代码: package com.example;import javax.ws.rs.GET; ...

  5. 通过ribbon 根据服务名获取所有服务实例的IP和端口列表

    代码使用SpringCloud版本E3 业务场景: 今天遇到一个业务场景,要求根据服务名获取当前微服务集群中所有的对应服务实例的IP和端口,通过分析源码推算出了写法. 原理简述: 如果代码中引入了sp ...

  6. C#实现Windows后台服务实例浅析

    2019独角兽企业重金招聘Python工程师标准>>> C#实现Windows后台服务实例之前要明白的一些概念:所谓Windows后台服务,即后台自动运行的程序,一般随操作系统启动而 ...

  7. .NET Remoting开发系列:(三) Remoting服务发布方式

    Remoting服务发布方式? 使用应用程序发布 这个在第一篇就已经讲了. 通过Windows服务发布 通过IIS发布 通过Windows服务发布Remoting 首先我们要建立一个WindowsSe ...

  8. 关于 Angular 服务实例作用域的问题 - 使用组件限定服务提供者的作用域

    官方链接 一种限定提供者作用域的方式是把要限定的服务添加到组件的 providers 数组中.组件中的提供者和 NgModule 中的提供者是彼此独立的. 当你要急性加载一个自带了全部所需服务的模块时 ...

  9. WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[中篇]

    在[第1篇]中,我们介绍了WCF关于实例管理一些基本的知识点,包括InstanceContext.InstanceContextMode.已经如何通过ServiceBehaviorAttribute应 ...

  10. WCF - 服务实例管理模式

    WCF 提供了三种实例上下文模式:PreCall.PreSession 以及 Single.开发人员通过 ServiceBehavior.InstanceContextMode 就可以很容易地控制服务 ...

最新文章

  1. 【Verilog HDL 训练】第 14 天(glitch-free的两个时钟切换电路)
  2. DataTable分页控件设计(适用于Gridview和Repeater)
  3. JAVA中字符串连接效率的测试(续)
  4. java三元操作符注意
  5. 《大数据》2015年第3期“网络大数据专题”——大数据时代的互联网分析引擎...
  6. ProjectEuler 2
  7. linux查看进程中的线程名,linux 怎么样查看一个进程的线程
  8. FPGA跨时钟域异步时钟设计的几种同步策略
  9. 【干货】无人机如何进行倾斜摄影的航线规划
  10. Python 使用Protobuf(struct模块)
  11. WebLogic如何设置session超时时间
  12. vj p1041神风堂人数 题解
  13. selenium的三种等待方式
  14. 【超简便的Python】 提取两个列表的共同元素
  15. 【Codeforces 869 C The Intriguing Obsession】 组合数学 思维
  16. javaEye上对于南京软件公司的讨论
  17. 分析家C语言接口软件,大智慧分析家 c语言 编程接口
  18. MQ延迟队列实现延迟消息
  19. matlab毕达哥拉斯质数,“毕达哥拉斯-史仲夏”常用勾股数组表
  20. 黑客攻击无孔不入:连电影字幕都能被入侵

热门文章

  1. db2查看数据库端口
  2. CMake下载 (大全?)(建议配合迅雷使用)(盲下)
  3. 如何通过 SSH 连接到 Docker 容器
  4. Visio画图,空间太小,画不下
  5. 字体转换,woff,ttf,otf,eot,svg
  6. python的基本函数图像_python绘制基本初等函数图像
  7. 柳神(柳婼)PAT甲级题目链接
  8. springboot在线银行贷款系统毕业设计源码281444
  9. 经典c语言笔试题及答案,C语言经典笔试题
  10. java 解析dex_将DEX反编译成Java源代码