简介
•.net remoting是.net在RPC分布式应用的技术。首先,客户端通过 remoting访问通道以获得服务端对象,再通过代理解析为客户端对象,通过通道来实现远程对象的调用。
原理
•远程对象代码可以运行在服务器上,然后客户端再通过 remoting中定义的通道连接服务器,获得该服务对象并通过序列化在客户端运行。
•通道即服务端与客户端之间通过IP地址和端口号建立的传输序列化对象的途径。
TCP通道
•remoting 的通道主要有两种:tcp 和 http。
•在.net中,system.runtime.remoting.channel 中定义了 ichannel 接口。ichannel 接口包括了 tcpchannel 通道类型和 http 通道类型。它们分别对应 remoting 通道的这两种类型。
•tcpchannel 类型
    tcp通道提供了基于 socket 的传输工具, 使用tcp协议
   来传输序列化的消息流。 tcpchannel类型默认使用二进制格式序列化消息对象,因此它具有更高的传输性能。
激活可序列化的对象
•在访问远程类型的一个对象实例之前,必须通过一个名为 activation 的进程创建它并进行初始化。这种客户端
    通过通道来创建远程对象,称为对象的激活。
•在 remoting中,远程对象的激活分为两大类:
    服务器端激活和客户端激活。
•.net remoting 把服务器端激活又分为 singleton 模式和singlecall 模式两种。
•singlecall 是一种无状态模式。一旦设置为singlecall 模式,则当客户端调用远程对象的方法时,remoting 会为每一个客户端建立一个远程对象实例。
•singleton 模式:此为有状态模式。如果设置为 singleton 激活方式,则 remoting 将为所有客户端建立同一个对象实例。当对象处于活动状态时,singleton 实例会处理所有后来的客户端访问请求,而不管它们是同一个客户端,还是其他客户端。singleton 实例将在方法调用中一直维持其状态。
•由于 remoting 传递的对象是以引用的方式,因此所传递的远程对象类必须继承marshalbyrefobject。
•因此,有了可以传输的对象,有了传输的通道,那么客户端就可以利用通道调用服务端的对象了。
 
Remoting是一个分布式处理服务。服务器端首先创建通道,并自动开启监听通道。根据客户端发出的请求,传递远程对象。
因此,编写Remoting程序,主要分为三部分:
1、被传递的远程对象;
2、服务器端监听程序;
3、客户端请求和处理对象程序;
 

第一步:先定义可序列化的远程对象。
须继承MarshalByRefObject对象,
是通过使用代理交换消息来跨越应用程序域边界进行通信的对象的基类。
 namespace RemotingModal
{
    public class RemotingModal:MarshalByRefObject
    {
          //远程对象
          public void GetMessage(string word)
          {
               System.Console.WriteLine(word);
          }
     }
}
 
第二步:服务器端:是一个控制台,首先要添加对System.Runtime.Remoting的引用,然后添加对RemotingModal的引用 。 
1、定义服务端监听端口。 2、注册通道。3、定义激活方式激活远程对象。

static void Main(string[] args)
{
//注册通道
TcpServerChannel Channel = new TcpServerChannel(9200);
ChannelServices.RegisterChannel(Channel, false);
Console.WriteLine("服务已启动,请不要关闭服务!");

//注册远程对象
RemotingConfiguration.RegisterWellKnownServiceType(typeof(CaseInfoModal.CaseInfoModal), "CaseInfoModal.rem", WellKnownObjectMode.Singleton);
Console.ReadLine();
}

 
第三步:客户端:
1、注册TCP通道
2、激活远程服务对象
3、获得远程对象的方法
 private void button1_Click(Object sender,EventArgs e)
{
    try{ 

string serverPath = ConfigurationManager.AppSettings["ServerPath"];
string url = "tcp://" + serverPath.Trim() + @"/RemotingModal.rem";
_server = (RemotingModal.RemotingModal)Activator.GetObject(typeof(RemotingModal.RemotingModal), url);

_server.GetMessage("传入值");

textBox1.Text="输出值";

    }
    catch(Exception e){
     MessageBox.Show(ex.Message);
    }
}

 
 
 
 
 

简单学会.net remoting的更多相关文章

  1. ionic 项目中创建侧边栏的具体流程分4步简单学会

    这是在学习ionic时,当时遇到的一些问题,觉得很难,就记笔记下来了,现在觉得如果可以拿来分享,有可能会帮助到遇到同样问题的人 ionic slidemenu 项目流程: cd pretices(自己 ...

  2. 多年的.NET开发,也只学会了这么几招

    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了   随着工作年龄逐渐增加,身边的重担也越来越多.以前可以在公司加班到晚上10点,现在不行了.以前可以通宵 ...

  3. 简要地写出一个.NET Remoting的示例

    在VS 2008中添加新的类库项目,并命名为NetRmClass,将所属解决方案命名为NetRm,勾选“创建解决方案的目录”.这样,NetRmClass类库项目目录即属于NetRm解决方案,并可以继续 ...

  4. .Net Remoting编程 ---- 系列文章

    .Net Remoting(应用程序域) - Part.1 摘要: 本文是.Net Remoting系列的第一篇文章,讲述了Remoting的“前驱知识点”--应用程序域.传值封送(Marshal b ...

  5. [JavaWeb基础] 007.Struts2的配置和简单使用

    1.框架简介 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架,用于快速开发Java Web应用.Struts实现的重点在C(Controller), ...

  6. [转载].NET Web开发技术(补充)

    大家在工作应该养成善于总结的习惯,总结你所学习.使用的技术,总结你所工作事项的比较好的地方,善于总结不断的沉淀优化自己.适时停下来总结下过去走过的路,才能让我们的未来走的更坚定.文章转自JamesLi ...

  7. 解析大型.NET ERP系统 分布式应用模式设计与实现

    C/S架构的应用程序,将一些复杂的计算逻辑由客户端转移到服务器端可以改善性能,同时也为了其它方面的控制..NET Remoting在局域网内调用的性能相当不错.ERP系统中基于.NET Remotin ...

  8. Redis 系列 (一) StackExchange.Redis的使用

    一.DLL安装 用NuGet搜索StackExchange.Redis,然后下载就可以. ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象.这个类的实 ...

  9. .NET面试题大全,包括微软、华为、中兴等大企业的面试真题

    简要地写出一个.NET Remoting的示例 [考点].NET Remoting程序的原理,.NET Remoting的基本编写方法.[出现频率]★★☆☆☆[解答]在VS 2008中添加新的类库项目 ...

随机推荐

  1. vue 导航钩子

    导航钩子 (译者:『导航』表示路由正在发生改变.) 正如其名,vue-router 提供的导航钩子主要用来拦截导航,让它完成跳转或取消.有多种方式可以在路由导航发生时执行钩子:全局的, 单个路由独享的 ...

  2. SQL 对时间的处理

    --获取当前日期(如:yyyy-mm-dd)Select Datename(year,GetDate())+'-'+Datename(month,GetDate())+'-'+Datename(day ...

  3. AngularJS使用指南

    ng-app 定义一个AngularJS应用程序 ng-model 把元素值绑定到AngularJS应用程序 ng-blind 把AngularJS应用程序数据绑定到HTML视图上 ng-init 初 ...

  4. Python3基础 创建一个空列表,一个空元组

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  5. Java生成带小图标的二维码-google zxing 工具类

    近期一直忙于开发微信商城项目,应客户要求,要开发个有图标的二维码.经过两次改版,终于实现了该功能(第一次没有小图标,这次才整合好的),如下是完整代码 . 该代码使用Java7开发,另外使用 core- ...

  6. 横版CG场景

    http://www.cgvoo.com/thread-27211-1-1.html <ignore_js_op><ignore_js_op><ignore_js_op& ...

  7. 第三讲. COTS包交换介绍

    COTS里面涉及到虚拟机的概念,所以网络稍微复杂一点点. 基本概念 目前虚拟机里面常见的网卡控制器有三类: 半虚拟化网卡设备,由Hypervisor统一管理,虚拟机里面采用特定的接口进行调用. 透传网 ...

  8. 携程Ctrip DAL的学习1

    携程Ctrip DAL的学习 1 本人net开发菜鸟,原理请自行看github的官网源码. 我这里是简单的使用(helloworld的水平). Ctrip DAL是携程框架部开发的数据库访问框架,支持 ...

  9. 让Xcode 8.x能够调试iOS 7.x真机

    首先需要 Xcode 7.x.可以去 苹果开发者官网 下载. 打开Finder, 进入文件夹: Xcode .x.app/Contents/Developer/Platforms/iPhoneOS.p ...

  10. json日期转换

    //调用 ChangeDateFormat(CreatTime) //json日期转换 function ChangeDateFormat(jsondate) { jsondate = jsondat ...