简介
•.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. 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机

    转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...

  2. http常见状态码解析

    自定义 Ajax原生编写ajax:function(opt){ var xmlhttp; //创建对象 if (window.XMLHttpRequest){// code for IE7+, Fir ...

  3. SpringMVC框架下实现JSON(类方法中回传数据到jsp页面,使用jQuery方法回传)

    JSON的实现,即将需要的数据回传到jsp页面: 1>.加入实现Json的三个架包到lib中:2>.目标方法上边加入注解,需要返回的值3>.在jsp页面中书写jQuery方法: ec ...

  4. 自定义圆饼(利用贝塞尔曲线和CGContext类完成)

    -(void)drawRect:(CGRect)rect{ CGFloat w = self.bounds.size.width; CGFloat h = self.bounds.size.heigh ...

  5. Symbol not found for architecture arm64 错误

    如果Archiectures和Valid Architectures都是对的,需要检查Other Linker Flags是否添加$(inherited),如果还不行,检查Library Search ...

  6. Boost学习笔记(五) progress_display

    progress_display可以在控制台显示程序的执行进度,如果程序执行很耗费时间,那么它能够提供一个友好的用户界面 #include <boost\timer.hpp> #inclu ...

  7. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  8. App的启动过程

    App的启动过程 所有的app都是通过launcher去启动的 launcher自己也是一个app,一个系统级别的app,放在asystem/app/下,使用系统签名. 对代码进行分析

  9. an interview question(3)

    最近看了些C面试题顺便复习一下C语言,现贴一些出来和大家分享. #include <stdio.h> void main () { ,,,,};--------- *(ptr++)+=; ...

  10. system_call中断处理过程

    张雨梅   原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 1.给menuos添加命令 改 ...