.NET Remoting 使用 Broker 模式






4.28/5 (14投票s)
2005年2月24日
3分钟阅读

47048

1309
.NET remoting 使用 Broker 模式。
引言
对于 remoting 中的服务器激活对象,我们通常倾向于将服务器远程类暴露给客户端,以便在客户端构建代理对象。 我认为 remoting 的主要目标是确保服务器上的代码不必被发送到客户端。
我的文章将解释如何使用 Broker 模式隐藏服务器代码的实现。
应用程序包含使用服务器激活对象的 remoting 示例代码,并有助于更好地理解 Broker 模式。 应用程序使用带有二进制序列化的 TcpChannel
。
我的目标读者是那些了解基本 remoting 概念的人 :-)
Broker 模式 – 初始视图
“通过将远程服务调用的实现细节封装到一个与业务组件本身不同的层中,从而隐藏它。”
客户端应用程序(称为 ClientAPP
)将从 BrokerInterface
调用方法,就像它调用任何本地接口一样。 但是,客户端接口内的这些方法会触发对远程应用程序(称为 ServerAPP
)执行的服务。 这对客户端是透明的,因为远程服务对象实现了相同的接口。
BrokerInterface
是一个必要的抽象,它通过向客户端提供有关服务的契约来使分发成为可能,服务器提供这些契约而无需在客户端公开实现细节。 隔离、简单性和灵活性是使用此模式的主要好处。
功能
我的应用程序使用 .NET remoting 从服务器检索用户详细信息作为 DataSet
。 使用以下机制来实现此功能
- 服务器实现 Broker 接口和
MarshalByRefObject
(程序集:RemoteComponents
)public class UserManager : MarshalByRefObject,IUserManager { public DataSet listUserDetails() { //logic for retrieving user details } }
UserManager
是一个远程启用的类,提供一个名为listUserDetails()
的方法,该方法返回用户详细信息的列表。 用于检索用户详细信息的逻辑写在这里。 - 创建监听器 (程序集:
ServerAPP
)RemotingConfiguration.RegisterWellKnownServiceType( typeof(UserManager), "UserDetails", WellKnownObjectMode.Singleton);
*
UserManager
的激活模式是单例,因此您在服务器上只有一个UserManager
实例运行。 如果用户详细信息应该根据任何组而改变,那么激活模式可以更改为SingleCall
。 - Broker 接口中的方法声明 (程序集:
BrokerInterface
)。namespace BrokerInterface { public interface IUserManager { DataSet listUserDetails(); } }
这是提取的
IUserManager
接口的代码。 方法“listUserDetails
”的实现将在部署在服务器中的UserManager
类中编写。 - 客户端检索 Broker 接口的实例 (程序集:
ClientAPP
)location="tcp://:4820/"; IUserManager mgr= (IUserManager)Activator.GetObject(typeof(IUserManager), location + "UserDetails");
客户端程序调用 remoting 框架方法
Activator.GetObject()
来检索服务器上UserManager
对象的代理。 该方法指定对象所在的位置以及应该返回的类型。在这种情况下,您应该在以下位置期望一个
IuserManager
对象:https://:4820/UserDetails。 拥有该实例后,您可以像在同一应用程序域中一样调用它上面的方法。 - 客户端调用该代理接口对象上的一个方法,该方法会调用服务器功能。
userDS=mgr.listUserDetails();
关注点
使用 .NET remoting 时,您必须仔细注意将应用程序部署到不同的程序集中。 我再次强调,主要目标是确保服务器上的代码不必被发送到客户端。
在此应用程序中发送给客户端的程序集
- ClientAPP
- BrokerInterface
服务器中需要的程序集
- ServerAPP
- BrokerInterface
- RemoteComponents