Mono是一个开源项目,旨在为.NET Framework提供一个跨平台的实现。本文将展示如何使用Mono构建一个分布式应用程序的基础。该应用程序使用C#编写,运行在基于RedHat 9的系统上,后端数据库使用的是IBM DB2,数据库示例为DB2自带的SAMPLE数据库,同时使用了IBM DB2开源管理提供者(包含在附件的zip文件中)。
这个示例应用程序分为两个概念组件:一个可以通过.NET Remoting访问的服务器组件,以及一个使用C#和GTK#编写的GUI应用程序。选择GTK#作为GUI工具包是因为它比Windows.Forms更加灵活,在某些方面也更加成熟,并且具有真正的跨平台优势。它还有一个非常大的优势,那就是拥有一个非常容易使用的界面设计器——GLADE。界面保存在基于XML的文件中,可以很容易地使用Glade.XML类导入到C#代码中。实际上,甚至可以在GLADE中定义应用程序将处理的事件,并指定处理每个事件的函数。
在Windows机器上运行GTK时,需要cygwin环境。服务器组件是客户端应用程序的数据源。为了保持示例的简单性,它只返回一个包含来自SAMPLE数据库的员工相关数据的ArrayList。客户端应用程序将接收这个ArrayList,并将员工数据插入到GtkTreeView中(这是Windows.Forms组件的一个灵活等价物,在这种情况下是一个DataGrid)。
在Linux上使用Mono:
mcs -unsafe -target:library /d:OS_LINUX -r:System.Data.dll -out:System.Data.Db2Client.dll *.cs
在Windows上使用Mono:
mcs -unsafe -target:library /d:OS_LINUX -r:System.Data.dll -out:System.Data.Db2Client.dll *.cs
管理提供者也可以与Microsoft.NET Framework实现一起使用:
csc -unsafe -target:library /d:OS_LINUX -r:System.Data.dll -out:System.Data.Db2Client.dll *.cs
mcs -r:System.Data.dll -r:System.Data.Db2Client.dll remotable.cs
mcs -r:System.Runtime.Remoting.dll -r:remotable.dll server.cs
mcs -target:exe -resource:db2test.glade -r:remotable.dll -r:System.Runtime.Remoting.dll -r:gtk-sharp.dll -r:glade-sharp.dll -out:sample.exe sample.cs
启动服务器:
[db2inst1@linux db2test]$ mono server.exe
服务器必须由具有DB2权限的用户启动。
启动客户端:
mono sample.exe