随笔分类 -  Distributed

分布式应用程序设计模式
[Remoting专题系列] 一:.NET Remoting
摘要:有太多的原因让我忽略了 Remoting,不过现在用它来开始 SOA 和 WCF 的旅途还是不错的选择。.NET Remoting 封装了分布式开发的消息编码和通讯方式,让我们用非常简单的方式既可完成不同模式的分布系统开发,同时其可配置、可扩展的特性也让我们拥有极大的灵活性。当然,我更看好其升级版本 —— WCF。 要了解 Remoting 的基本信息和介绍,还是看 MSDN 比较好。先写一个简单的 Example 来体验一下,为了方便,我直接在一个工程里面创建不同的应用程序域来模拟分布模式。 阅读全文
posted @ 2007-06-05 09:30 编程山人 阅读(494) 评论(0) 推荐(1)
[Remoting专题系列] 二:远程对象
摘要:在分布系统中,远程对象需要跨越应用程序域进行传递,因此其表示方式会有所不同。基于性能和数据共享等原因考虑,Remoting 中远程对象可以是 "值封送对象(MBV)" 或 "引用封送对象(MBR)"。 MBV 机制类似于 Web 无状态请求,服务器创建对象实例传递给信道发送到客户端,而后服务器端不再继续维护其状态和生存期。而 MBR 则在其生存期内一直存活在服务器程序域中,客户端只是通过代理对象来完成调用消息传递,客户端可以通过相关接口来延长远程对象的生存期。 实现 MBV 一般通过 SerializableAttribute 特性,或者实现 ISerializable 接口。运行下面的例子,我们会发现远程对象在客户端程序域内,并且不是代理对象。 阅读全文
posted @ 2007-06-05 09:29 编程山人 阅读(358) 评论(0) 推荐(0)
[Remoting专题系列] 三:激活模式
摘要:对于 MBR,我们可以指定不同的激活模式。 服务器激活(Server-Activated Objects / SAO):只有在客户端调用代理对象第一个方法时才创建,区分为 Singleton 和 SingleCall 两种模式。Singleton 一如设计模式中的名称,无论有多少客户端都只有一个实例存在;而 SingleCall 则为每次调用创建一个新对象,因此它是无状态的。SingleCall 在方法调用完成后立即失效,不会参与生存期租约系统。 客户端激活(Client-Activated Objects / CAO):在客户端调用 new 或 Activator.CreateInstance 时立即创建。 通常情况下服务器激活模式只能使用默认构造函数,客户端激活模式则没有此限制。当然,可以通过其他方法来绕开这个限制,比如动态发布,我们会在后面的章节解决这个问题。 在 Remoting 中,我们使用 RemotingConfiguration 类型来完成远程类型的注册。RegisterWellKnownServiceType()、Regist 阅读全文
posted @ 2007-06-05 09:28 编程山人 阅读(501) 评论(0) 推荐(0)
[Remoting专题系列] 四:生存期租约
摘要:Remoting 采取了一种称之为 "租约" 的机制来管理远程对象(Singleton、CAO)的生存期策略。每个应用程序域中都有一个租约管理器(LifetimeServices),它负责管理所有参与生存期的远程对象租约。租约管理器定期检查所有租约以确定过期的租约时间,如果租约已过期,将向该对象发起人(Sponsor)的发送请求,查询是否有谁要续订租约,若没有任何发起人续订该租约,租约将被移除,该远程对象也会被删除等待垃圾回收器回收。如果远程对象被发起人多次续订租约或被客户端持续调用,其生存期可以比其生存期租约长得多。 所谓发起人 (Sponsor,MSDN 翻译为"主办方",真别扭!) 就是一个或多个与远程对象关联,用于定义租约延长时间的对象。租约管理器通过回调发起人方法(ISponsor.Renewal)来查询是否续订租约。发起人需要继承自 MarshalByRefObject,且必须实现 ISponsor 接口。在 System.Runtime.Remoting.Lifetime 名字空间中,Framework 为我们提供了一个缺省实现 —— ClientSpo 阅读全文
posted @ 2007-06-05 09:27 编程山人 阅读(477) 评论(0) 推荐(0)
[Remoting专题系列] 五:信道
摘要:信道(Channel)是 Remoting 体系的承载平台,负责处理客户端和服务器之间的通讯,其内容包括跨域通讯、消息传递、对象编码等等。信道必须实现 IChannel 接口,根据通讯方向又分别提供了继承版本 IChannelReceiver 和 IChannelSender。Remoting 框架为我们提供了 IPC、TCP 以及 HTTP 的实现版本,当然我们还可以在网络上找到其他协议的实现版本。 阅读全文
posted @ 2007-06-05 09:26 编程山人 阅读(539) 评论(0) 推荐(0)
[Remoting专题系列] 六:异步调用
摘要:Remoting 的异步调用和单个应用程序域异步编程基本相同。 阅读全文
posted @ 2007-06-05 09:24 编程山人 阅读(337) 评论(0) 推荐(0)
[Remoting专题系列] 七:调用上下文
摘要:调用上下文(CallContext)提供了用于存储属性集的数据槽,可以让我们在调用服务器方法时将一些额外数据一并传送过去。当然,这些额外数据有点限制,就是必须要实现 ILogicalThreadAffinative 接口。调用上下文在应用程序域边界被克隆,其数据槽不在其他逻辑线程上的调用上下文之间共享。 阅读全文
posted @ 2007-06-05 09:19 编程山人 阅读(346) 评论(0) 推荐(1)
[Remoting专题系列] 八:元数据
摘要:.NET Remoting 基础结构需要正确的元数据,以便将一个应用程序域中的对象连接到另一个域中的对象。通常我们将包含远程类型的程序集同时发布到服务器和客户端,但这并不是一个好主意。有太多的原因阻止我们这么做: 1. 我们并不想客户端开发人员知道远程对象的内部细节,诸如私有成员内容等。 2. 我们不希望每次升级都更新客户端文件。 阅读全文
posted @ 2007-06-05 09:16 编程山人 阅读(365) 评论(0) 推荐(0)
[Remoting专题系列] 九:动态发布
摘要:使用动态发布有什么好处? 1. 避开 SAO 只能使用默认构造方法的限制。 2. 自主管理 SAO 的载入、卸载,以及其 URI。 RemotingServices 通过使用类 RemotingServices 提供的方法,我们可以很轻松实现这些目标。 Marshal: 用于将 MarshalByRefObject 转换为 ObjRef 类的实例。 Connect:客户端可以用该方法创建远程代理对象的实例。 Disconnect:断开服务器远程对象与信道的连接。客户端代理在断开后调用任何方法都会触发 RemotingException。 Unmarshal:接受 ObjRef 并从它创建一个客户端代理对象。这个方法很少被使用,因为多数情况下我们并不会直接将 ObjRef 显示传递给客户端,而是交由 Remoting 基础结构来处理。 ObjRef ObjRef 是远程对象的可序列化表示,用于跨应用程序域边界传输对象引用。为对象创建 ObjRef 称为封送。可以通过信道 阅读全文
posted @ 2007-06-05 09:12 编程山人 阅读(368) 评论(0) 推荐(0)
[Remoting专题系列] 十:追踪服务
摘要:.NET Remoting 的追踪服务使我们可以获取由远程结构发出的有关对象与代理的行为通知。追踪服务是可插入的,我们可以将一个或多个自定义跟踪处理程序注册到追踪服务中,当发生封送、取消封送或断开当前 AppDomain 中的对象或代理时,注册到中的每个追踪处理程序都将被远程处理调用。 阅读全文
posted @ 2007-06-05 09:11 编程山人 阅读(321) 评论(0) 推荐(0)
[Remoting专题系列] 十一:事件
摘要:在 Remoting 中使用 Event 主要是为了实现 CallBack 机制,让服务器在接收到某个 "消息" 时,主动调用某个或多个客户端的方法。 阅读全文
posted @ 2007-06-05 09:10 编程山人 阅读(331) 评论(0) 推荐(0)
[Remoting专题系列] 十二:配置文件
摘要:使用配置文件替代硬编码可使应用程序拥有更高的灵活性,尤其是对分布式系统而言,意味着我们可以非常方便地调整分布对象的配置。Remoting 的配置文件比较简单,详细信息可以参考 MSDN。 阅读全文
posted @ 2007-06-05 09:09 编程山人 阅读(315) 评论(0) 推荐(0)
让.NET Remoting更快些-IPCChannel的实现[转]
摘要:IPCChannel是.NET Framework 2.0 里面新增的,它使用 Windows 进程间通信 (IPC) 系统在同一计算机上的应用程序域之间传输消息。在同一计算机上的应用程序域之间进行通信时,IPC 信道比 TCP 或 HTTP 信道要快得多。但是IPC只在本机应用之间通信。所以,在客户端和服务端在同一台机器时,我们可以通过注册IPCChannel来提高Remoting的性能。但如... 阅读全文
posted @ 2007-05-31 00:15 编程山人 阅读(607) 评论(0) 推荐(0)
Microsoft .Net Remoting系列专题之一[转:含评论]
摘要:什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Microsoft® .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。 阅读全文
posted @ 2007-05-31 00:13 编程山人 阅读(627) 评论(0) 推荐(0)
一步一步学Remoting之二:激活模式
摘要:远程对象的激活模式分服务端激活和客户端激活两种。 阅读全文
posted @ 2007-05-31 00:07 编程山人 阅读(462) 评论(1) 推荐(0)
.Net Remoting配置文件的用法
摘要:通过.Net Remoting配置文件可以为Remote Objects设定许多参数,如Channel、SAO服务端激活对象类型(Singleton/SingleCall)等等,方便以后在不用修改代码或重新编译的情况下,改变Remote Objects的行为。 阅读全文
posted @ 2007-05-31 00:06 编程山人 阅读(496) 评论(0) 推荐(0)
比较经典的关于Remoting的入门教程[转]
摘要:基本原理 当客户端创建远程RemotableClass的一个实例,.NET框架在客户端应用程序域中产生一个代理。该代理看起来就像实际对象。代理收到调用后,通过通道连接到远程的对象。 阅读全文
posted @ 2007-05-30 23:45 编程山人 阅读(562) 评论(0) 推荐(0)
[转]Remoting的一个代码示例(借助Remoting实现发送信息功能)
摘要:(一).说明 一个远程调用示例. 此示例实现功能: 客房端调用远程方法(远程方法可以弹 出自定义信息),实现发送信息功能. 实现原理概是这样的:客户端不能直接调用远程对象,它必须先通过信道请求服务端宿主程序,当收到客户端请求时, .net远程处理框架会在宿主组件的应用程序域中生成所需要的远程对象. 并执行远程对象中的方法. 阅读全文
posted @ 2007-05-23 17:41 编程山人 阅读(373) 评论(0) 推荐(0)
[转]Visual C#.Net网络程序开发之TCP/IP
摘要:TCPClient 、 UDPClient和TcpListener,而不是直接向 Socket 中写。它们之间的这种层次关系示意如下:   可见,TcpClient 类基于 Socket 类构建,这是它能够以更高的抽象程度提供 TCP 服务的基础。正因为这样,许多应用层上的通讯协议,比如FTP(File Transfers Protocol)文件传输协议、HTTP(Hypertext Transfers Protocol)超文本传输协议等都直接创建在TcpClient等类之上。   TCPClient 类使用 TCP 从 Internet 资源请求数据。TCP 协议建立与远程终结点的连接,然后使用此连接发送和接收数据包。TCP 负责确保将数据包发送到终结点并在数据包到达时以正确的顺序对其进行组合。 阅读全文
posted @ 2007-05-23 17:37 编程山人 阅读(952) 评论(1) 推荐(0)