一..NET Remoting简介:

.NET Remoting从某种意义上讲是DCOM的替代品。ASP.NET Web服务十分有用,但是这项技术在企业内联网的解决方案中,对于某些业务请求来说并不快,也没有足够的灵活性,而且,ASP.NET Web服务需要有运行时的支持。使用.NET Remoting技术后,可以将Web服务提供给世界上的任何地方。而且可以在所有的应用程序类型中运行Web服务。

二..NET Remoting 的基本原理:

体系结构图如下:

三.几个重要的概念:

1.远程对象:

远程对象类是从MarshalByRefObject类中派生的。跨越应用程序域调用这个类需要使用代理。.NET Remoting支持两种类型的远程对象:知名的(Well-known)远程对象和客户激活(Client-activated)远程对象。远程对象其实包括两层含义:

操作远程对象:对象运行在远程,客户段向他发送消息;

传递远程对象:将远程对象拿到本地,或者将本地对象发送过去,对副本进行操作。

2.激活:

使用new运算符可以激活远程对象。还有其它一些方式也可以激活远程对象,在以后的随笔里面我会介绍。

3.通道:

一个远程对象使用通道发送和接收消息。服务器选择一个通道来监听请求,客户端选择通道来和服务器通讯。Remoting提供了内置的通道:TCP通道和HTTP通道,我们也可以编写自己的通道。

4.编组:

数组通过应用程序域被传递的过程称为编组。将变量作为远程对象的参数来发送时,这个变量必须被转换,以便能够通过应用程序域发送该变量。

5.监听:

使用监听,能够将某些功能置入到方法调用链中。如果调用某个对象的方法,监听层便能够捕获调用来转换方法调用,或是完成某些日志记录。.NET Remoting调用链的每一部分都是用监听。

四.开发Remoting三步走:

开发.NET Remoting分三步走,在这里以一个简单的例子来说明。

1.创建远程对象:

继承System.MarshalByRefObject

using System;
using System.Collections;
using System.Text;namespace SimpleRemoting
{public class HelloServer : MarshalByRefObject{public HelloServer(){///输出信息,服务器激活Console.WriteLine("服务器激活……");}public String HelloMethod(String name){Console.WriteLine("服务器端 : {0}", name);return "这里是:" + name;}}
}

2.创建宿主应用程序:

注册通道

注册服务器激活的远程对象

运行宿主程序

using System;
using System.Net;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels.Http;namespace SimpleRemoting
{public class Server{public static int Main(string [] args) {///创建Tcp通道TcpChannel chan1 = new TcpChannel(8085);///创建Http通道HttpChannel chan2 = new HttpChannel(8086);///注册通道
            ChannelServices.RegisterChannel(chan1);ChannelServices.RegisterChannel(chan2);RemotingConfiguration.RegisterWellKnownServiceType(typeof(HelloServer),"SayHello",WellKnownObjectMode.Singleton);System.Console.WriteLine("按任意键退出!");///下面这行不能少
            System.Console.ReadLine();return 0;}}
}

3.建立客户端程序:

注册通道

根据URL得到对象代理

使用代理调用远程对象

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels.Http;
using System.IO;namespace SimpleRemoting
{public class Client{public static void Main(string[] args){///使用TCP通道得到远程对象TcpChannel chan1 = new TcpChannel();ChannelServices.RegisterChannel(chan1);HelloServer obj1 = (HelloServer)Activator.GetObject(typeof(SimpleRemoting.HelloServer),"tcp://localhost:8085/SayHello");if (obj1 == null){System.Console.WriteLine("连接TCP服务器失败");}///使用HTTP通道得到远程对象HttpChannel chan2 = new HttpChannel();ChannelServices.RegisterChannel(chan2);HelloServer obj2 = (HelloServer)Activator.GetObject(typeof(SimpleRemoting.HelloServer),"http://localhost:8086/SayHello");if (obj2 == null){System.Console.WriteLine("连接HTTP服务器失败");}///输出信息
            Console.WriteLine("ClientTCP HelloMethod {0}",obj1.HelloMethod("Caveman1"));Console.WriteLine("ClientHTTP HelloMethod {0}",obj2.HelloMethod("Caveman2"));Console.ReadLine();}}
}

结束语:初识用.NET Remoting来开发分布式应用就到这里了,有时间我会就.NET Remoting技术写成系列文章。包括基于租约的生存期,编组,异步远程调用等等。

出处:http://www.cnblogs.com/Terrylee/archive/2005/11/03/267621.html

转载于:https://www.cnblogs.com/mq0036/p/4029454.html

初识用.NET Remoting来开发分布式应用相关推荐

  1. 初识用.NET Remoting来开发分布式应用 (转载)

    初识用.NET Remoting来开发分布式应用 一..NET Remoting简介: .NET Remoting从某种意义上讲是DCOM的替代品.ASP.NET Web服务十分有用,但是这项技术在企 ...

  2. 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用

    一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术--.NET Remoting. 二..NET Remoting 介绍 2.1 . ...

  3. 使用.NET Remoting开发分布式应用——基于租约的生存期(转载)

    使用.NET Remoting开发分布式应用--基于租约的生存期 一.概述 知名类型的SingleCall对象可以在客户程序的方法调用之后被垃圾收集器清理掉,因为它没有保持状态,属于无状态的.而客户激 ...

  4. 利用Web Services开发分布式应用

    一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术--Web Services 二.Web Services 详细介绍 2.1 We ...

  5. [原创]flex 3 + .net开发flash Remoting一 --- 开发环境

    flex 3 + .net开发flash Remoting一 --- 开发环境 本篇文章将介绍flash Remoting 开发的必备的运行环境和相关配置过程: 一.开发必备环境.     1. fl ...

  6. ZooKeeper程序员指南--使用ZooKeeper开发分布式应用程序

    ZooKeeper程序员指南 开发使用ZooKeeper的分布式应用程序 介绍 ZooKeeper数据模型 ZNodes 手表 数据访问 短暂的节点 序列节点 - 唯一命名 容器节点 TTL节点 在Z ...

  7. 在使用 .NET Remoting 技术开发跨进程通信时可能遇到的各种异常

    在使用 .NET Remoting 开发跨进程应用的时候,你可能会遇到一些异常.因为这些异常在后验的时候非常简单但在一开始有各种异常烦扰的时候却并不清晰,所以我将这些异常整理到此文中,方便小伙伴们通过 ...

  8. .NET Remoting程序开发入门篇(五)

    客户端: public class ServerObject:MarshalByRefObject { public ServerObj() { throw new System.NotImpleme ...

  9. docker初识_初识 docker 搭建自己的开发环境

    换了一台设备,程序猿嘛第一件事肯定是先把开发环境搭建起来,以前为了方便都是搞的集成环境,这次准备下载集成环境的时候,突然想起 docker 这个东西,在下虽然了解一些概念性的东西但一直为曾实践.人嘛, ...

  10. 1.初识JAVA概念、配置开发环境

    一.JAVA概念 Java语言是美国Sun公司(Stan ford University Network),在1995年推出的高级的编程语言.所谓编程语言,是计算机的语言,人们可以使用编程语言对计算机 ...

最新文章

  1. jsp内置对象application
  2. python入门经典例题-Python入门经典练习题
  3. nginx常见面试题
  4. loginform登录表单 vs_【VSRC唯科普】穿越网页表单与登录窗口的采集(第9/14篇)...
  5. 由于不当的执行顺序导致的死锁
  6. 中医提到的气是否真实存在?
  7. ubuntu下面 将桌面换成 英文
  8. 线性代数【14】线性变换 linear transformation
  9. vim 环境写 markdown 的插件推荐
  10. JavaScript-常用正则函数(适合忘记时看)
  11. 【初识】汽车诊断协议 UDS / DoIP
  12. 富文本编辑器小技巧大杂烩之TinyMce
  13. Android WiFi开发总结
  14. 微信小程序——视图层
  15. ucenter 用户加密方式
  16. 机器学习--西瓜书思维导图
  17. 中信银行计算机岗位面试自我介绍,中信银行面试自我介绍
  18. 倍福--CAB文件的配置
  19. 二、详解 DVWA_Reflected反射型XSS
  20. IDL 文本编码、代码补全快捷方式、IDL doc、格式器、行号显示设置

热门文章

  1. 注册表添加 右键功能
  2. c++:ISO C++ forbids declaration of ‘xxx’ with no type
  3. recover/panic
  4. win访问linux NFS磁盘映射共享驱动器卡顿
  5. 如何使用IVT BlueSoleil 如何在电脑上使用蓝牙耳机
  6. P1049装箱问题(背包,变形)
  7. 理解Python的协程机制-Yield
  8. android:layout_height、android:layout_width、android:height、android:width的关系与区别
  9. 如何在ESXi5.1上运行一个虚拟的ESXi虚拟机并且在这个虚拟的ESXi虚拟机里运行64位的系统?...
  10. ORA-01157、01110问题解决