初识用.NET Remoting来开发分布式应用

一..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

时间: 2024-12-21 16:39:33

初识用.NET Remoting来开发分布式应用的相关文章

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

一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术——.NET Remoting. 二..NET Remoting 介绍 2.1 .NET Remoting简介 .NET REmoting与MSMQ不同,它不支持离线可得,另外只适合.NET平台的程序进行通信.它提供了一种允许对象通过应用程序域与另一个对象进行交互的框架..NET 应用程序都在一个主应用程序域中执行的,在一个应用程序域中的代码不能访问另一个应用程序域的数据,然而在

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

一.概述 知名类型的SingleCall对象可以在客户程序的方法调用之后被垃圾收集器清理掉,因为它没有保持状态,属于无状态的.而客户激活的类型的对象和知名类型的SingleTon对象都属于生存期长的对象,如果在客户程序停止使用远程对象之前,远程对象被禁用了,则客户程序会得到一个RemotingException异常.因为该对象已经和下一个方法调用(从客户程序进行的方法调用)断开了连接,只要客户程序需要该对象,它就必须被激活. 微软的DCOM技术使用了Ping机制,在这种机制下,客户程序有规律的对

跟我一起学WCF(3)——利用Web Services开发分布式应用

一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 Web Services 概述 Web Services是支持客户端与服务器通过网络互操作的一种软件系统,是一组可以通过网络调用的应用程序API.在Web Services中主要到SOAP/UDDI/WSDL这三个核心概念,下面分别介绍下这三个概念的定义. SOAP:SOAP(Simple Object

利用Web Services开发分布式应用

一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 Web Services 概述 Web Services是支持客户端与服务器通过网络互操作的一种软件系统,是一组可以通过网络调用的应用程序API.在Web Services中主要到SOAP/UDDI/WSDL这三个核心概念,下面分别介绍下这三个概念的定义. SOAP:SOAP(Simple Object

使用.NET Remoting开发分布式应用——配置文件篇

我们已经知道可以通过编码的方式配置服务器通道和远程客户机,除此之外,还可以使用配置文件对服务器通道和远程客户机进行配置.使用远程客户机和服务器对象的配置文件的优点在于,用户无需修改任何一行代码,也无需进行重新编译,便可以配置通道和远程对象. .NET提供了Remoting配置文件的标准,基于XML格式. 一.配置文件 1.服务器配置文件: 先来看一个服务器配置文件的实例,然后我再具体解释一下其中的内容: <?xml version="1.0" encoding="utf

使用NServiceBus开发分布式应用

转自:http://www.cnblogs.com/richieyang/p/5041883.html 系列主题:基于消息的软件架构模型演变 NServiceBus 是一个.Net平台下开源的消息服务框架,这类产品有时也被称作ESB(Enterprise Service Bus)——企业服务总线.NServicebus官方地址:http://particular.net/git: https://github.com/Particular/NServiceBusNServiceBus原作者Udi

《初识Java微信公众号开发》 学习中遇到的困难

前一段时间无聊的时候,在慕课网上自学了一点点微信公众号开发(受学姐威胁). 慕课网教程的地址:http://www.imooc.com/learn/368 毕竟是免费的课程,不可能讲的那么详细.所以我吧我遇到的问题跟大家分享一下. 这是我照着课程敲的代码(IDE是Eclipse): https://github.com/Zuosy/WeiXin 发到github上面了. 为了这个,我还专门到廖大的网站上学了一遍Git. 廖大的Git教程传送们:https://www.liaoxuefeng.co

第一篇:初识ASP.NET控件开发_第一节:控件类及其继承关系

1)System.Web.UI.Control(以下简称Control) Control 类是包括自定义控件.用户控件和页在内的所有 ASP.NET 服务器控件的基类..定义由所有 ASP.NET 服务器控件共享的属性.方法和事件. 命名空间:System.Web.UI程序集:System.Web(在 system.web.dll 中) 2)System.Web.UI.WebControls.WebControl(以下简称WebControl) WebControl 类是 System.Web.

.NET Remoting 分布式开发实例思想(转)

实例开发 一个家用电器连锁店设有一个总部和许多分店,总部和分店以及各分店之间经常需要进行各种信息的查询(如:商品当日价目表.各店销售状况和库存信息等),对此组织机构建立分布式数据库查询系统,可实现总部和各店信息的共享,便于统一管理. 3.1 系统设计 3.1.1系统结构图 系统结构如图2所示: 图2 系统结构图 总部和各分店都配置了一台具有固定IP的服务器,其它电脑通过集线器与服务器相连,总部和各分店的服务器通过通信网络联接起来. 网管联盟www.bitsCN.com 3.1.2 系统实现步骤