65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简单的 .Net Remoting Facade

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.74/5 (7投票s)

2008 年 9 月 4 日

CPOL

3分钟阅读

viewsIcon

20007

downloadIcon

184

为所有格式化程序、通道和激活配置组合提供简化的 API

引言

本文及随附的源代码演示了如何使用每种格式化程序、通道协议和激活模式的组合来实现 .Net Remoting。为此,我实现了一个 .Net Remoting API 的 Facade。您可能希望将源代码用作学习和实验工具,通过并排比较每种 Remoting 模式的实现方式,帮助您理解它们的工作方式。

背景

网上有很多关于 .Net Remoting 的优秀文章。
这篇文章,由 Juval Lowy 撰写,提供了该技术的优秀概述。我建议您在继续之前阅读它。
Facade 中客户端激活对象的实现使用了 Factory 模式,如MSDN 中所述。

这种模式的基本思想是通过实现 Factory 对象的服务器激活来实现客户端激活,然后通过调用 Factory 方法在服务器(和客户端上的代理)上创建 Remoting 对象。这种策略提供了客户端激活的功能,而无需将远程对象程序集复制到每个客户端位置。正如 Juval 在他的文章中所解释的,客户端激活允许客户端为每个激活客户端实例化一个远程对象,并控制该对象的生命周期。

该实现受到 Allen Anderson 的这篇文章的启发。

使用代码

此示例解决方案的目的是使用远程计算器对象添加任意两个整数。

该解决方案包含 4 个程序集

Server.exe 是一个控制台应用程序,它实现并托管计算器对象。
Client.exe 是一个控制台应用程序,它获取远程计算器对象的代理并调用其 Add 方法,打印结果。
RemotingFacade.dll 是一个类库,提供一个 Facade,它将 .Net Remoting 的基本功能暴露给 Client.exe 和 Server.exe。
CalculatorInterface.dll 是一个类库,包含计算器类的接口,没有执行代码。

Server.exe 引用 CalculatorInterface.dll 以便从该接口派生具体的 Calculator 对象。它还引用 RemotingFacade.dll 并使用其 RemotingServer 对象注册 Calculator 类以供服务器端进行 Remoting。

Client.exe 引用 CalculatorInterface.dll 以将对远程计算器对象的引用转换为此接口。它还引用 RemotingFacade.dll 并使用 RemotingFacade.dll 中的 RemotingClient 对象来获取引用远程 Calculator 的代理。

关注点

需要注意的是,在这 4 个程序集中,只有 RemotingFacade.dll 引用 System.Runtime.Remoting 并使用其命名空间。Server.exe 和 Client.exe 不了解 .Net Remoting API。

相反,RemotingFacade.dll 不了解 Calculator 对象,甚至不了解其 ICalculator 接口。

从部署的角度来看,Server.exe 和 Client.exe 位于不同的位置,包括在两台不同的计算机上。这两个位置都将拥有 CalculatorInterface.dll 和 RemotingFacade.dll 程序集的副本。话虽如此,客户端位置将没有实现加法运算的 Server.exe 的副本。
这是一个重要的好处,因为它意味着我们不需要将我们的核心“add”技术暴露给任何可能被黑客攻击或复制的客户端机器。

历史

版本 1.0

© . All rights reserved.