初识用.NET Remoting开发分布式应用
来源:互联网 发布:电脑硬盘恢复软件 编辑:程序博客网 时间:2024/05/04 07:57
一..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.创建宿主应用程序:
结束语:初识用.NET Remoting来开发分布式应用就到这里了,希望大家对.NET Remoting有所了解
注册通道
注册服务器激活的远程对象
运行宿主程序
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}
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}
初识用.NET Remoting来开发分布式应用就到这里了,希望对大家了解.NET Remoting有所帮助。
- 初识用.NET Remoting开发分布式应用
- 初识用.NET Remoting来开发分布式应用
- 初识用.NET Remoting来开发分布式应用
- 初识用.NET Remoting来开发分布式应用
- 初识用.NET Remoting来开发分布式应用
- 初识用.NET Remoting来开发分布式应用
- 初识用.NET Remoting来开发分布式应用
- .NET Remoting来开发分布式应用初步
- .NET Remoting与分布式应用开发
- 使用.NET Remoting开发分布式应用——配置文件篇
- 回顾.NET Remoting分布式开发
- WindowsService+.Net Remoting 实现分布式应用系统
- 做.net Remoting分布式开发的总结
- .NET Remoting开发分布式应用——基于租约的生存期
- c# Remoting分布式开发
- WCF分布式开发必备知识(2):.Net Remoting
- WCF分布式开发必备知识(2):.Net Remoting
- 应用程序域(.Net Remoting学习一) 分类: 分布式开发
- 嗅探TFTP配置文件传输
- minibase
- JSR-177
- 侯捷对进入IT行业的年轻人的建议
- 想换个职业是否可行呢?
- 初识用.NET Remoting开发分布式应用
- Oracle 常用查询
- 添加删除PPA (Personal Package Archives for Ubuntu)
- 内存拷贝函数不同写法的效率分析
- Android开发环境配置简介
- linphone的交叉编译(MIPS)
- hibernate缓存使用注意事项
- 递归构建HTML
- 百度文库技术浅析