软件频道>设计工具系统开发安全办公陶吧IT教育Vista频道|产品中心 群乐 软件下载 Vista群乐 SOA案例研究
您现在的位置: 天极网 > 软件频道 > 用.NET Remoting来开发分布式应用初步
全文

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

2005-11-05 09:50作者:Terrylee出处:博客园责任编辑:方舟
天极软件专题专区精选     到天极软件“读编交流区”畅所欲言
Google专区 POPO专区 QQ专区 QQ挂机 了解Web2.0
Flash MX 视频教程 Photoshop视频教程 网页设计视频教程 照片处理数字暗房
PPT动画演示教程 Excel动画教程集 Word动画演示教程 Windows Vista专区
特洛伊木马专区 黑客知识教程专区 防火墙应用专区 注册表应用专区
Windows API开发专区 网络编程专区 VB数据库编程专区 图像处理与多媒体编程

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

1using System;
2using System.Collections;
3using System.Text;
4
5namespace SimpleRemoting
6{
7 public class HelloServer : MarshalByRefObject
8 {
9 public HelloServer()
10 {
11 /**////输出信息,服务器激活
12 Console.WriteLine("服务器激活……");
13 }
14 public String HelloMethod(String name)
15 {
16 Console.WriteLine(
17 "服务器端 : {0}", name);
18 return "这里是:" + name;
19 }
20 }
21}

  2.创建宿主应用程序:

  注册通道

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

  运行宿主程序

1using System;
2using System.Net;
3using System.Runtime.Remoting;
4using System.Runtime.Remoting.Channels;
5using System.Runtime.Remoting.Channels.Tcp;
6using System.Runtime.Remoting.Channels.Http;
7
8namespace SimpleRemoting
9{
10
11 public class Server
12 {
13 public static int Main(string [] args)
14 {
15
16 /**////创建Tcp通道
17 TcpChannel chan1 = new TcpChannel(8085);
18
19 /**////创建Http通道
20 HttpChannel chan2 = new HttpChannel(8086);
21
22 /**////注册通道
23 ChannelServices.RegisterChannel(chan1);
24 ChannelServices.RegisterChannel(chan2);
25
26 RemotingConfiguration.RegisterWellKnownServiceType
27 (
28 typeof(HelloServer),
29 "SayHello",
30 WellKnownObjectMode.Singleton
31 );
32
33
34 System.Console.WriteLine("按任意键退出!");
35 /**////下面这行不能少
36 System.Console.ReadLine();
37 return 0;
38 }
39
40 }
41}
42
43

  3.建立客户端程序:

  注册通道

  根据URL得到对象代理

  使用代理调用远程对象

1using System;
2using System.Runtime.Remoting;
3using System.Runtime.Remoting.Channels;
4using System.Runtime.Remoting.Channels.Tcp;
5using System.Runtime.Remoting.Channels.Http;
6using System.IO;
7
8namespace SimpleRemoting
9{
10 public class Client
11 {
12 public static void Main(string[] args)
13 {
14 /**////使用TCP通道得到远程对象
15 TcpChannel chan1 = new TcpChannel();
16 ChannelServices.RegisterChannel(chan1);
17
18 HelloServer obj1 = (HelloServer)Activator.GetObject(
19 typeof(SimpleRemoting.HelloServer),
20 "tcp://localhost:8085/SayHello");
21
22 if (obj1 == null)
23 {
24 System.Console.WriteLine(
25 "连接TCP服务器失败");
26 }
27
28 /**////使用HTTP通道得到远程对象
29 HttpChannel chan2 = new HttpChannel();
30 ChannelServices.RegisterChannel(chan2);
31
32 HelloServer obj2 = (HelloServer)Activator.GetObject(
33 typeof(SimpleRemoting.HelloServer),
34 "http://localhost:8086/SayHello");
35
36 if (obj2 == null)
37 {
38 System.Console.WriteLine(
39 "连接HTTP服务器失败");
40 }
41
42 /**////输出信息
43 Console.WriteLine(
44 "ClientTCP HelloMethod {0}",
45 obj1.HelloMethod("Caveman1"));
46 Console.WriteLine(
47 "ClientHTTP HelloMethod {0}",
48 obj2.HelloMethod("Caveman2"));
49 Console.ReadLine();
50 }
51 }
52}
53

  结束语:

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

相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
近期热点
文章排行
本周
本月
最近更新
关于我们|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2008 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 Powered by 天极内容管理平台CMS4i
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众-网站地图