建构分布式系统: .NET Remoting 篇

 

Whats .NET Remoting

随着网际网的普及化,企业对于软件的需求也趋向复杂化与多样化,为满足

这些企业的需求,分布式系统也应运而生,分布式系统指的是将软件组件化,放置于

同的Server 中,前端应用程序再经由网路來使用这些组件。由于分布式系统具备经由

网际网路來使用软件组件的能,因此能够符合中大型企业对于整合海内外分公司管

系统的需求,另一方面由于软件已组件化,相对的其重用性与延展性也会大幅提升。

.NET Remoting 就是这型的分布式技术,原本Microsoft 设计.NET Remoting 的初衷是

希望她能取代DCOM 的地位,但事情并没有这么顺,基于Security 及对象生命周期

等机制的相性,目前的.NET Remoting 仍然无法完全取代DCOM 的地位。

如此,.NET Remoting 丰富的特色依然吸引了不少设计者的注目,其中最主要的

特色莫过于其高的延展性,同于DCOM 的封闭式架构,.NET Remoting 中的绝大

部份组件都是可延伸的,设计者可自撰写这些组件延伸.NET Remoting 的能

这点对于日渐复杂的分布式系统是相当有用的。

Web Services VS Remoting

.NET 中,Web Services 的光芒几乎完全盖过Remoting,原因外乎是

Web Services 所代表的是一个规格,一个系统整合的机。Web Services 技术,

设计者可以轻的整合同的语言及平台,这点在以往是很难达到的,另一个

重点是Web Services 代表着一个宣示,宣示新网服务时代的來臨,为网际网

开启另一个商机。那么既然Web Services 有着这么多的好处,那么为何还要提出

Remoting ??答案很简单,Web Services 虽然拥有许多优点,但同时也存在着许多

的缺点。Web Services 达到高兼容性的目的,使用SOAP/XML 做为沟通

的讯息标准,而SOAP/XML 是使用纯文字模式呈现,这代表着讯息必须要花费

较多的时间传输,因此程序的效自然也会减低。另一方面是规格的问题,由于

SOAP 规格目前依然在持续演进中,许多重要的课题如Stateful ObjectCall Back

Security 等规格都还未完全定案,当然架构于SOAP 之上的Web Services 应用范围也

受到限制。反观Remoting 则没有这些问题,由于这是由Microsoft 所独提出并

实作的架构,因此自然没有规格上的束缚,Microsoft 可以视设计者或自身的需求

加入新功能。在效上,Remoting 提供Web Services 一样的SOAP 讯息格式

之外,另外还提供Binary(二进制)讯息格式,与纯文字的SOAP 讯息格式相比,

Binary 的讯息明显小许多,因此应用程序可以获得高的效Remoting 的另一个

主要特色则是其高的延展性,Remoting 是一个完全开放性的架构,允许设计者为其

添加特殊的功能,如设计者可以自撰写Transport Channel 对象提供同的传输

接口(SMTPWindows Message),也可以撰写Message Formatter 使用同的讯息

格式(如编码过的Binary/SOAP Message Formatter),设计者甚至可以撰写Proxy 对象

Remoting 核心的运作。那么看起Remoting 似乎比Web Services 好啰??当然是,

种技术所满足的层面是同的,Remoting 是针对企业内部的应用,这系统通常

只挶限在企业内部,如将一些商业对象撰写为Remoting Object,放置于总公司的Server

中,总公司/分公司的UI 系统再Remoting 技术存取这些商业对象。Web Services

则可以满足企业对外的需求,Amazon 提供搜寻书籍的Web Services 供其它网站

使用,或是信用卡中心提供信用卡确认的Web Services 供电子商务使用(这有安全性

问题,目前相信还没人敢如此做)。那么该如何选择者呢??这点要视系统的需求

而定,笔者在后面Web Services Remoting 的特色,者可以考表1 选择

系统所需要的技术。

(1)

ASP.NET Web Services Remoting

高兼容性,可整合同语言与平台。低兼容性,只能在.NET 语言与.NET 平台上使用。

使用SOAP/XML 讯息标准,网路流

较大。

可选用Binary 讯息标准,网路流量较小,设计者可

延伸,支持共存模式(Multi-Message Formatter)

支援Call backStateful Object 支援Call backStateful Object

目前只支持HTTP 传输接口,理論

上可使用其它接口。

支持TCPHTTP 传输接口,设计者可自延伸,

支持共存(Multi-Transport Channel)模式。

架构较无延展性。 高延展性,设计者可自定Transport ChannelMessage

FormatterProxy

PS:表中所出的是一些笔者认为会影响设计者选择的特色,因此主观性较强

.NET Remoting 的架构

(1)

1 .NET Remoting 的大致架构,以Client 來說,当程序要求取得一个Remoting Object

时,实际上所取得的是一个Proxy 对象,这个对象存在于Client 端的计算机上,拥有

Remoting Object 的所有方法与属性,Client 端对这个对象的操作都会被重导至位于Server

端的Remoting Object 上。图中的Formatter 部份是讯息格式对象,.NET 中提供

SOAP Binary 种讯息格式对象,Client 端对Proxy 对象的操作最终会被转换为

讯息后经由Transport 传至Server 端,Server 端再由讯息转换回操作反应到Remoting Object

上,这个讯息转换的动作就是藉由Formatter 对象的帮助完成的,Formatter 对象在

这些动作中是扮演讯息取与写入者的角色,如程序需要传递一个对象时,只须呼叫

Formatter. Serialize 将对象转为讯息,反之则呼叫Formatter.Deserialize 由讯息转回对象。

Formatter 是可以共存的,这代表着设计者可以撰写出一个同时支持SOAPBinary

讯息的Remoting Server,日后的章节对Formatter 会有详细的讨Transport 部份

代表着传输层,.NET 提供HTTP TCP Transport Channel,与Formatter 相同,

传输层是可以共存的,这也就是设计者可以撰写一个同时支持HTTPTCP

传输协议的Remoting ServerDispatcher 部份则是Remoting 的核心对象群之一,这些

对象负责建Remoting Object 的实体与生命周期管,在Dispatcher 的一連串动作中,

设计者可以藉由Message Sink (日后会讨到,现在请将她视为一种事件,供设计者

针对一些动作做出反应)來參与这些动作,Dispatcher 的动作相当复杂,其中牵扯到

许多与CLRJIT 互动的技巧,日后笔者会再详述这部份。经由上面的讨,我们

可以.NET Remoting 是一个完全开放性的架构,设计者可以藉由撰写同的对象

改变或延伸这个架构。

Remoting ObjectSAO CAO

.NET Remoting 允许设计者撰写型的Remoting Object,一种是较常

SAO (Server Activate Object),另一种则是CAO (Client Activate Object),这者最大的

区别在于SAO 是无态的(Stateless)Server 会为某一个呼叫者保存态,简单

就是Client 端无法得知前次呼叫与这次呼叫的对象是否是同一个,亦或是

呼叫期间对象的态是否被其它的呼叫者所改变。CAO 则是具态的(Stateful)

Client 端所取得的CAO 对象是依存于Client 端的,前次呼叫与这次呼叫永远是同一个

对象(生命周期会影响这个结果)次呼叫间也可能有另一个Client 端改变对象的

态,因为Client 端会有同的CAO 对象实体。

.NET Remoting 下的程序架构

.NET Remoting 下,设计者可以选择同的程序架构,这些架构各自有其优缺点与

适合使用的地方,这一节中将介绍笔者常用的种。

Share Interface

简单的就是由Remoting Object 出一个接口(Interface),并将其写在一个

DLL(Assembly)中,再由位于Server 程序中的Remoting Object 实作这个接口,这种架构

的好处是可以完全隐藏Remoting Object 的实作面,Client 端只需要有内含Interface 定义

DLL 就可以取用Remoting Object。坏处是这种方式无法直接作用于CAO(因为你无法

一个Interface),需要藉助Soapsuds 产生Wrapper Classs 或是实作Design Patterns 中的

Factory Method __ 9__成。Share Interface 是多

原文地址:https://www.cnblogs.com/daitengfei/p/362058.html