简介
•.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. 初学者-微信小程序 问题解决办法记录

    1.tabBar不显示的问题 1),检查大小写 2),pagePath路径书写,和pages路径一样,不能多或者少一个"/"或者"?" 2.tabBar和nav ...

  2. WEB前端html基础中的各类标签介绍

    2:html中有很多标签,这里列举十几种标签,有它们的用法及在使用过程中的注意事项!

  3. EF之ExecuteSqlCommand更新出现无效的解决方案

    本篇文章将会剖析为什么会出现这一现象.以及解决的办法 先来看一下代码 public static TResult AddTest() { TestDAL testdal = DALFactory.Cr ...

  4. 数组类型与sizeof与指针的引用

    以char类型为例: char a[100];     //a类型为char[100]    &a类型为 char (*)[100]    *a类型为char char *p = a;     ...

  5. What's the difference between <b> and <strong>, <i> and <em> in HTML/XHTML? When should you use each?

    ref:http://stackoverflow.com/questions/271743/whats-the-difference-between-b-and-strong-i-and-em The ...

  6. Try to write a script to send e-mail but failed

    #-*-coding: utf-8 -*- '''使用Python去发送邮件但是不成功,运行后,等待一段时间, 返回[Errno 10060] A connection attempt failed ...

  7. UTF-8 ->GBK

    /** * GBK->UTF8 */ //方法一 旧方法 //NSString *encode1 = [@"%E6%88%91" stringByReplacingPerce ...

  8. select元素中设置padding效果

    更新2016-9-17:这个bug是在mac os上的发生,在window系统中不存在这个问题! 给select元素增加:padding-left:20px;但是未生效,如下图所示: 在select上 ...

  9. 此数据库文件与当前sql server实例不兼容

    在vs2015导入mdf数据库文件时提示:此数据库文件与当前sql server实例不兼容. mdf文件的版本是SQL SERVER 2005的,而VS2015自带的数据库是LocalDB,直接导入该 ...

  10. 哈希表(Hash Table)

    参考: Hash table - Wiki Hash table_百度百科 从头到尾彻底解析Hash表算法 谈谈 Hash Table 我们身边的哈希,最常见的就是perl和python里面的字典了, ...