简介
•.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. 通过jquery获取天气的方法

    代码为: $.getScript('http://int.dpool.sina.com/iplookup/iplookup.php?format=js',function(_result){ if(r ...

  2. java源代码跟踪

    首先我们要学会的是将JDK源码加载Eclipse中. 1.点“窗口”——>"首选项",选择左边的"Java"——>"已安装的JRE&quo ...

  3. js设计模式总结-代理模式

    代理模式 解决哪一类问题 从字面意思上理解,代理模式解决对一个对象的直接访问,这种直接访问可能是"不方便"的,所谓"不方便"可能是直接访问成本比较大(在前端领域 ...

  4. python基础编程

    1.if else var1 = 100 if var1: print ("1 - if 表达式条件为 true") print (var1) #为0时,条件不成立 var2 = ...

  5. JFinal - 事务实现的原理

    使用声明式事务 事务类本身就是一个拦截器,可以用注解的方式配置.方法内部的所有 DML 操作都将在本次事务之内. 配置代码如下: @Before(Tx.class) public void saveP ...

  6. 【转载】动态新增svg节点

    原文地址:http://blog.csdn.net/tomatomas/article/details/50442497 原文作者:番茄大圣 创建svg节点时,要使用createElementNS函数 ...

  7. c++11 function bind 测试。

    实验小结 1)function 是一个模板类.有函数指针成员.可以看作安全型函数指针. template<typename _Res, typename... _ArgTypes> cla ...

  8. 输入事件驱动---evdev_handler的大致实现流程(修整版)

    一.input输入子系统框架 下 图是input输入子系统框架,输入子系统由输入子系统核心层(input core),驱动层和事件处理层(Event Handler)三部分组成.一个输入事件,比如滑动 ...

  9. Spring AOP中pointcut expression表达式解析

    Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&am ...

  10. jQuery 移动端ajax请求列表数据,实现点击翻页效果(还有手势往下滑动翻页)。

    1 首先是html部分 <div class="content"> <div class="list"></div>  // ...