设计并构建 Remoting 服务器之后,应将其提供的接口发布给客户端使用,以解析编译时的引用并允许动态地创建代理对象。有很多方法可以完成此操作,这里有必要重复一下。但首先有几点提示:
1、静态字段和方法永远都不能进行远程处理,.NET Remoting 始终处理某些形式的实例成员。
2、私有方法/类型不能进行远程处理。
3、MarshalByRef 类型是通过引用进行远程处理的,可序列化的类型是在客户端进程中复制值并执行代码。
对象虚拟方法 Equals、GetHashCode 和 MemberwiseClone 等在本地执行。
了解了这些设计中应该注意的地方,就可以选择使用以下方法发布由 Remoting 服务器导出的接口:
向客户端提供服务器端的程序集,以在编译时使用。当只需要接口而不需要实现时,不建议也没必要使用这种方法。
对于 SOAP/HTTP 客户端(这里的 Remoting 服务器的功能是提供 Web 服务,尽管对这种服务还有些疑惑),Remoting 服务器可以提供说明服务器对象和方法的 Web 服务说明语言 (WSDL) 文件。.NET Framework SDK 附带的 SOAPSUDS 实用程序可用于生成这些 WSDL 文件,以作为元数据使用。实际上,这种方法更适合 Web 服务(从严格的 asmx 意义上讲)而不是 Remoting,因为 Remoting 接口的 WSDL 并不能与 Web 服务接口的 WSDL 完全兼容。
在单独的库中声明一个接口并使用客户端部署该库。发布执行该接口的服务器类,客户端将可以使用它,方法是获取它执行的接口的代理。这是一种非常清楚的设计选择,因为它是人们特别感兴趣的接口。这种方法只能用于服务器激活的对象(请参阅产品特性一节),因为无法创建接口的实例。
使用 SOAPSUDS 为客户端构建替代类作为元数据使用。您可以对 Remoting 服务器程序集运行 SOAPSUDS,生成输出程序集(可以作为元数据直接使用)或源文件(可以直接包括在应用程序中)。 这种机制对于构建多层应用程序很有用,在这种应用程序中,一层中的对象要访问另一层中的远程对象。这种方法很有意思,上文的简介部分中引用的多层应用程序就使用了此方法。
假设我们在以下文件夹中打开一个命令窗口:
$FRAMEWORKSDK\Samples\Technologies\Remoting\Basic\RemotingHello\Service
我们可以编写:soapsuds -id:.-types:Hello.HelloService,Hello -oa:HelloInterface.dll
这将创建一个输出程序集 HelloInterface.dll,它包含在当前目录的 Hello 程序集中找到的只基于 Remoting 服务器 Hello.HelloService 的元数据。该程序集可由客户端直接使用。Remoting 服务器的位置是根据标准的 Remoting 配置,基于运行时提供的配置数据派生得到的。为客户端程序集生成的 MSIL
ldfld object [System.Runtime.Remoting]System.Runtime.Remoting.Services.RemotingClientProxy::_tp
清楚地显示出我们没有使用 Remoting 服务器实现,而是使用了由 SOAPSUDS 生成的元数据所构建的代理类。
不能确保/支持 SOAPSUDS 使用二进制进行格式化,因为它在输出程序集元数据中嵌入/映射了一些 SOAP 特有的内容。
建议您尽量保持 Remoting 接口的简单,使用“充实”而不“花哨”的接口,也就是说,要试着限制设计中远程调用的数量。在某些情况下,这可能需要传递冗余参数。将远程接口放在单独的类中,与实际实现的类相区分。这样可以获得一种表面类型模式:在需要时,可以轻松地使用另一种技术替换其中的 Remoting 层。
文章地址: http://www.qqread.com/dotnet/y520949000.html相关专题
- .NET移动与嵌入式技术 (5950篇文章)
- .NET开发手册 (5652篇文章)
- vb.net入门——ToolBar 控件的使用 (267次浏览)
- vb.net入门——OpenFileDialog 组件的使用 (75次浏览)
- vb.net入门——FontDialog 组件的使用 (52次浏览)
- vb.net用Graphics画一个五角星 (46次浏览)
- vb.net入门——FolderBrowserDialog 组件的使 (45次浏览)
- vb.net绘制干扰点 (44次浏览)
- vb.net入门——ColorDialog 组件的使用 (41次浏览)
- vb.net巧用ToolTip控件获取鼠标坐标 (39次浏览)
- 用vb.net创建一个鼠标绘图程序 (39次浏览)
- vb.net入门——SaveFileDialog 组件的使用 (38次浏览)



