在运行于不同进程中的对象之间建立通信(无论是在同一台计算机上,还是在相距数千公里的计算机上)是常见的开发目标。通过 .NET 远程处理,客户端应用程序可以使用同一台计算机(或其网络中其他任何可用的计算机)上的其他进程中的对象。可以从 Web 应用程序、控制台应用程序、Windows 服务进行通信。因此我们将基于.net Remoting技术实现GIS服务器。
MapRender接口
我们首先设计如下的一个MapRender接口,在服务器端实现之,客户端则通过Remoting远程调用,使用Server端的服务。 MapService类 MapService实现了MapRender接口,提供Map服务,返回生成的Map的文件名。其实现是通过bridge模式,调用 _mapEngine 来完成具体的操作。在构造函数(New)内,使用Factory模式初始化 _mapEngine,打开数据(如下代码),在Dispose中关闭数据。
实际的程序可以从配置文件里读入需要的数据,然后初始化MapEngine,这里直接初始化为SimpleMapEngine。
MapEngine(具体的地图引擎) 地图引擎首先实现了一个基类,然后在此基础上继承不同的引擎。对于使用MO和SuperMap的引擎,可以使用Adapter模式来实现。本文实现了一个“假的”Simple引擎只是返回一个已有的图片地址(Server Stub模式)。
[本来准备使用SuperMap Object实现一个Map引擎,但有些COM互操作的问题解决不了,暂时作罢,这样也有一个好处,即任何人都可以测试此程序]
启动Map Service服务
我们在Main函数内启动MapService服务:
实际的实现,可以使用类似代码和配置文件,启动多个Map Service服务,供不同的地图程序调用。
测试Map Service服务
我们可以创建一个WinForm程序来测试此Map Service服务,首先,添加MapRender接口IMapRender的引用,对在Form Load事件里初始化远程对象MapService:
这样,我们就可以使用 _map 对象获取Map Service服务,返回需要的数据。