首页 > 开发 > 综合 > 正文

使用C#编写Ice应用程序

2024-07-21 02:18:44
字体:
来源:转载
供稿:网友

最大的网站源码资源下载站,

ice是一种优秀的分布式网络中间件,比起corba好上许多,也更简洁。优点我在这里也不便多说了,有专文介绍,也不是今天的主题。有兴趣的可以查一下,《程序员》杂志好像有专题。
下面主要介绍一下怎样使用c#编写基于ice的网络应用程序。
环境:windows server 2003 enterprise, visual studio.net 2003(.net framework 1.1)
先到http://www.zeroc.com/download.html下载ice的安装包,windows下用msi的。为方便起见,我下载的是vs.net2003的专用包。如下:


注意:ice-1.5.1-vc71.msi 安装包是必需的。 安装完毕后,将安装目录下的bin目录加入环境变量的path路径,然后就可以在vs.net中开发ice应用了。

首先,我们编写一个slice定义文件(相当于corba里面的idl文件)。文件内容很简单,因为我们要从一个“hello world”程序开始。
命名为printer.ice:
interface printer
{
void printstring(string s);
};
用下面的命令编译:slice2cs.exe printer.ice(如果找不到命令,表示环境变量没有设置成功,可以使用bin目录的全路径)
这条命令会在当前目录下产生printer.cs文件:


恭喜你,初战告捷!继续加油!
我用vs.net建了一个空的解决方案icetest,然后添加了一个空的项目icetest,加入printer.cs文件,最后建立server.cs文件(不用说你也猜到了,现在是编写服务端)。文件目录如下:



在server.cs中添加如下代码:

using system;

namespace icetest
{
/**//// <summary>
/// summary description for server.
/// </summary>
public class server
{
public server()
{
//
// todo: add constructor logic here
//
}

public static void main(string[] args)
{
int status = 0;
ice.communicator ic = null;
try
{
ic = ice.util.initialize(ref args);
ice.objectadapter adapter
= ic.createobjectadapterwithendpoints(
"simpleprinteradapter", "default -p 10000");
ice.object obj = new printeri();
adapter.add(
obj,
ice.util.stringtoidentity("simpleprinter"));
adapter.activate();
ic.waitforshutdown();
}
catch (exception e)
{
console.error.writeline(e);
status = 1;
}
finally
{
if (ic != null)
ic.destroy();
}
environment.exit(status);
}
}

public class printeri : _printerdisp
{
public override void printstring(string s, ice.current current)
{
console.writeline(s);
}
}
}
前面的代码都是例行公事,public class printeri : _printerdisp的代码才是我们需要的(简单吧!)
按照同样的方法,我们建立iceclienttest项目,先添加printer.cs文件,然后编写cient.cs文件,具体内容如下:

using system;

namespace iceclienttest
{
/**//// <summary>
/// summary description for client.
/// </summary>
public class client
{
public client()
{
//
// todo: add constructor logic here
//
}

public static void main(string[] args)
{
int status = 0;
ice.communicator ic = null;
try
{
ic = ice.util.initialize(ref args);
ice.objectprx obj = ic.stringtoproxy(
"simpleprinter:default -p 10000");
printerprx printer
= printerprxhelper.checkedcast(obj);
if (printer == null)
throw new applicationexception("invalid proxy");
printer.printstring("hello world!");
}
catch (exception e)
{
console.error.writeline(e);
status = 1;
}
finally
{
if (ic != null)
ic.destroy();
}
environment.exit(status);
}
}
}


同样,里面大部分都是例行公事,只有printer.printstring("hello world!");一句才是关键。
现在我们可以build解决方案了,成功后便产生了icetest.exe 和iceclienttest.exe 文件。如果没有成功,记得在项目中添加引用,加入icecs.dll(也在安装的bin目录下)。
应该可以了,下面看看运行结果:


运行结果很简单,就是服务端输出客户端输入的“hello world”字符串。比corba简单吧?
最后贴出服务端的uml图,客户端的类似就不贴了。


以上是我参考《distributed programming with ice》(官方网站可以下载,是ice软件包的官方文档)一书做的练习,内容很简单,请大家指教!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表