接口定义

实体定义,注意需要序列化


using System;
namespace Interface
{
[Serializable]
public class DataEntity
{
public string ReportName { get; set; }
public string ReportId { get; set; } }
}

接口定义


namespace Interface
{
public interface IDataCenter
{
string Query();
DataEntity QueryData();
}
}

服务端

实现类

using System;
using Interface; namespace Server
{
class DataCenterImpl : MarshalByRefObject, Interface.IDataCenter
{
#region IDataCenter 成员 public string Query()
{
return "I'm server";
} #endregion #region IDataCenter 成员 public Interface.DataEntity QueryData()
{
DataEntity ret = new DataEntity();
ret.ReportId = Guid.NewGuid().ToString();
ret.ReportName = "GSM报告";
return ret;
} #endregion
}
}

主方法

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Threading; namespace Server
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("我是服务端");
TcpServerChannel chan = new TcpServerChannel(9999);
ChannelServices.RegisterChannel(chan, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(DataCenterImpl), "server", WellKnownObjectMode.SingleCall);
Console.WriteLine("按q退出");
while (Console.ReadKey().KeyChar != 'q')
{
Thread.Sleep(10);
}
}
}
}

客户端

using System;
using System.IO;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using Interface; namespace Client
{
class Program
{
private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); static void Main(string[] args)
{
log4net.Config.XmlConfigurator.Configure(new FileInfo("Log4net.xml"));
TcpClientChannel chan = new TcpClientChannel();
ChannelServices.RegisterChannel(chan, false);
IDataCenter idc = (IDataCenter)Activator.GetObject(typeof(IDataCenter), "tcp://localhost:9999/server", null); string value = idc.Query();
logger.Info(value);
var entity = idc.QueryData();
Console.WriteLine(entity.ReportId + "\t" + entity.ReportName);
Console.Read();
}
}
}

C# rmi例子的更多相关文章

  1. JAVA RMI例子

    RMI 是java语言的一个RPC框架,本文给出基础例子如下: 1.实现接口: public interface ICalc extends Remote { public int add(int p ...

  2. Docker容器技术

    Docker介绍 什么是容器 Linux容器是与系统其他部分隔离开的一系列进程,从另一个系统镜像运行,并由该镜像提供支持进程所需的全部文件. 容器镜像包含了应用的所有依赖项,因而在从开发到测试再到生产 ...

  3. docker容器的安装与使用

    docker 容器概念 1.什么是容器 容器就是在隔离环境运行的一个进程,如果进程停止,容器就会销毁.隔离的环境拥有自己的系统文件,IP地址,主机名等. kvm虚拟机,linux,系统文件 程序: 代 ...

  4. Docker:常用命令大全 [七]

    一.docker的命令的解释 1.命令解释 docker run -d -p 80:80 nginx run (创建并运行一个容器) -d 放在后台 -p 端口映射 nginx docker镜像的名字 ...

  5. Docker介绍及使用

    什么是容器? 容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁.隔离的环境拥有自己的系统文件,ip地址,主机名等,kvm虚拟机,linux,系统文件 程序:代码,命令 进程:正在运行的程 ...

  6. 云计算 docker 容器使用命令

    docker 使用命令: docker version 查看docker版本号 vi /etc/docker/daemon.json { "registry-mirrors": [ ...

  7. docker学习及应用

    一.docker发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+Docker,这两年docke ...

  8. docker深入学习

    docker深入学习 一.容器的介绍和容器的发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+D ...

  9. Java RMI简单例子HelloWorld

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

随机推荐

  1. [ionic开源项目教程] - 第3讲 左右滑动菜单的实现(使用Tabs和SlideBox)

    使用Tabs和SlideBox实现左右滑动菜单 1.将tab1.html的代码改为如下: <ion-view view-title="健康"> <ion-cont ...

  2. 利用RunTime解决由NSTimer导致的内存泄漏

    NSTimer使用场景 用NSTimer来实现每隔一定时间执行制定的任务,例如最常见的广告轮播图,使用NSTimer实现这个功能很简单代码如下 NSTimer *_timer; _timer = [N ...

  3. 瞎折腾之Mvc WebApi的使用以及跨域问题

    在公司经常会用到调用接口的情况,但是一直是用的webservice,我感觉真是太笨重了.虽然某些人感觉用的很爽.非常爽.比如说:公司在开发的时候需要对接另一组的接口,然后就只能是指定端口和ip到他的电 ...

  4. MVC项目中应用富文本编辑器UEditor中的几个坑

    UEditor:百度出品 官网连接:http://ueditor.baidu.com/website/ 错误现象:在官网上复制到本地后,上传图片功能不能用, 控制台提示:“请求后台配置项http错误, ...

  5. HDU 1838 Chessboard

    dp[i][j]表示以(i,j)为右下角所含棋盘的最大规模, 如果 s[i][j] == s[i-1][j-1] && s[i][j] != s[i-1][j] && ...

  6. 15.Object-C--浅谈Foundation框架OC数组NSArray与NSMutableArray

    昨天总结了一下NSString与NSMutableString,今天我在这里总结一下NSArray与NSMutableArray. NSArray数组是:不可变数组. nil 是数组元素结束的标记.O ...

  7. tornado 实践 - 目录结构

    . ├── README.md └── store_management ├── Session.vim ├── auth │   ├── __init__.py │   ├── views.py ├ ...

  8. liux环境下配置jdk

    大家都知道,现在JAVA的发展可谓是如日中天,它覆盖面非常广泛,小到个人PC,大到商业应用都能见到它的身影.以前它是由SUN公司来维护的,现在已经归属到甲骨文旗下了. 今天我们来学习一下Java JD ...

  9. 看人家如何拿到腾讯阿里的offer

    我是如何同时拿到阿里和腾讯offer的: https://segmentfault.com/a/1190000002627927

  10. Func<T, TResult> 委托的由来和调用和好处(为了高大上,为了白富美)

    Func<T, TResult>是系统的内置委托的中最常用的一个.特点就是必须有一个返回值.(func委托有多个重载,所有重载的最后一个参数就是返回值的类型,前面的是参数类型).注:没有返 ...