第一章 C# .net4.0创建第一个ICE项目

一、环境准备

 

1、安装VS2010

         2、安装ZeroC(ICE),这里以ZeroC3.4.2版本为为例,需要设置环境变量

                   设置环境变量:ICE_HOME: C:\Program Files (x86)\ZeroC\Ice-3.4.2

                   Path变量追加:;%ICE_HOME%\bin;

                   注意:如果是64位的系统将安装目录下的bin\x64\下的所有文件拷贝到bin\

                              目录下。

 

二、建立项目

1、打开VS新建一个接口类库项目,名称为: ICEInterface。注意:新建项目的时候项目  路径不能有中文字符,否则ICE编译会失败,如图所示:

2、新建完成之后,然后右键项目属性,选择Ice Configuration,如图所示:

 

3、然后勾选Enable IceBuilder和Ice,如图所示:

4、然后我们在改项目中新建一个文件夹:SliceDefine,并且在该文件夹下面新建一个文件,名为:ICETest.ice,然后保存会发现会在该目录自动生成

一个类:ICETest.cs。ICETest.ice文件的内容为:

#ifndef _ICETEST_

 

         #define _ICETEST_

         module Lengyue{

                  moduleTest{

                            interface TestService{

                                     //从服务器返回一串字符串

                                     string GetServerName();

                            };

                  };

         };

         #endif


如图所示:

05、然后新建一个服务端类库项目,项目名称为:ICEServer,如图所示:

06、然后引用ICEInterface项目,然后右键项目选择Ice Configuration,选择Enable Ice Builder、Glacier2、IceBox、IceGrid,如图所示:

07、然后在服务端新建一个类:ICETestServiceImpl实现接口项目Ice自动生成0的抽象类服务,代码如下:

 

	namespace ICEServer
         {
	               publicclassICETestServiceImpl : TestServiceDisp_
                      {


                               public    override      string GetServerName(Ice.Current current__)
                              {
                                       return"Hello World";
                             }
                     }
        }namespace ICEServer
         {
	               publicclassICETestServiceImpl : TestServiceDisp_
                      {


                               public    override      string GetServerName(Ice.Current current__)
                              {
                                       return"Hello World";
                             }
                     }
        }

 

如图所示:

08、实现接口之后,我们在新建一个类ServiceInit这个类用于初始化接口服务,这个类需要实现IceBox.Service类,代码如下:

 

 

namespace ICEServer
{
    public class ServiceInit : IceBox.Service
    {
        public ServiceInit()
        {
        }
	privateObjectAdapter adapter = null;
	//参数name代表部署文件中service的name属性
	publicvoid start(string name, Ice.Communicator communicator, string[] args)
        {
            try
            {
		string adapterName = "IceTestAdapter-" + name;//适配器名称
                adapter = communicator.createObjectAdapter(adapterName);
		ICETestServiceImpl service = newICETestServiceImpl();
		Identity serviceId = communicator.stringToIdentity("IceTest");
                adapter.add(service, serviceId);
                adapter.activate();
            }
	    catch (System.Exception ex)
            {
		Console.WriteLine(ex.Message);
            }
#if DEBUG
	    Console.WriteLine("服务已启动");
#endif
        }
	public void stop()
        {
            adapter.destroy();
        }
    }
}
	privateObjectAdapter adapter = null;
	//参数name代表部署文件中service的name属性
	publicvoid start(string name, Ice.Communicator communicator, string[] args)
        {
            try
            {
		string adapterName = "IceTestAdapter-" + name;//适配器名称
                adapter = communicator.createObjectAdapter(adapterName);
		ICETestServiceImpl service = newICETestServiceImpl();
		Identity serviceId = communicator.stringToIdentity("IceTest");
                adapter.add(service, serviceId);
                adapter.activate();
            }
	    catch (System.Exception ex)
            {
		Console.WriteLine(ex.Message);
            }
#if DEBUG
	    Console.WriteLine("服务已启动");
#endif
        }
	public void stop()
        {
            adapter.destroy();
        }
    }
}

 

如图所示:

09、这时服务端的代码就写完了,然后我们打开ZeroC的安装目录,找到C#的Demo项目,我的路径为: D:\Users\lengyue\Documents\ZeroC\Ice-3.4.2-demos\democs\IceBox,

然后打开项目文件夹,找到:config.icebox、config.service两个文件,将两个配置文件拷贝到服务端项目路径下面,这两个文件是用于配置IceBox调试的,如图所示:

config.icebox文件的内容为:

IceBox.Service.1=ICEServer.dll:ICEServer.ServiceInit --Ice.Config='config.service'

说明如图所示:

config.service文件的内容为:
IceTestAdapter-1.Endpoints=default -h 127.0.0.1 -p 10003
Config.RootPath=D:\zeroc\bin\AppServer\ConfigurationManage\Config
Ice.MessageSizeMax=102400 
Ice.ThreadPool.Client.Size=2
Ice.ThreadPool.Client.SizeMax=10
Ice.ThreadPool.Server.Size=2
Ice.ThreadPool.Server.SizeMax=10
说明如图所示:

10、然后配置项目调试 右键config.icebox->属性,将复制到输出目录:始终复制,右键config.service->属性,将复制到输出目录:始终复制,如图所示:

右键服务端项目->属性->调试,如图所示:

11、此时服务端项目就配置开发完成,然后右键服务端项目->调试,出现如图表示服务端启动成功:

12、创建客户端项目,项目名称为:ICEClient,控制台项目,如图所示:

13、右键客户端项目->Ice Configuration,如图所示:

14、然后引用ICEInterface接口项目,在Main方法中添加如下代码:

 

	    Ice.Communicator ic = null;
	    try
            {
                ic = Ice.Util.initialize();
		//IceTest这个字符串为服务的唯一标识,communicator.stringToIdentity("IceTest");
                Ice.ObjectPrx objPrx = ic.stringToProxy("IceTest:default -h 127.0.0.1 -p 10003");
		TestServicePrx testService = TestServicePrxHelper.checkedCast(objPrx);
		if (testService == null)
                {
			Console.WriteLine("无效的代理");
			return;
                }
		Console.WriteLine(testService.GetServerName());
                ic.destroy();
		Console.ReadKey();
            }
	    catch (Exception e)
            {
		Console.WriteLine(e.Message);
            }
    Ice.Communicator ic = null;
	    try
            {
                ic = Ice.Util.initialize();
		//IceTest这个字符串为服务的唯一标识,communicator.stringToIdentity("IceTest");
                Ice.ObjectPrx objPrx = ic.stringToProxy("IceTest:default -h 127.0.0.1 -p 10003");
		TestServicePrx testService = TestServicePrxHelper.checkedCast(objPrx);
		if (testService == null)
                {
			Console.WriteLine("无效的代理");
			return;
                }
		Console.WriteLine(testService.GetServerName());
                ic.destroy();
		Console.ReadKey();
            }
	    catch (Exception e)
            {
		Console.WriteLine(e.Message);
            }

如图所示:

 

代码说明如图:



15、此时客户端项目就开发完成,我们来调试一下,首先启动服务端程序,如图所示:

然后启动客户端程序,如下图表示成功访问服务端

收到服务端发送过来的hello world。

错误解决:

1、如果在启动服务的时候遇到如下错误,如图所示:


该错误为ice加载服务的时候去反射服务类的时候出错,由于项目是.net4.0的程序集,需要在启动icebox的时候指定运行时版本。方法如下:

 

(1)、在ICE安装目录下的bin\目录下找到iceboxnet.exe.config文件,没有则新建一个,然后文件里                 面添加如下内容:

                   <?xmlversion="1.0"?>

                   <configuration>

                          <startup>

                                 <supportedRuntime version="v4.0"sku=".NETFramework,Version=v4.0"/>

                          </startup>

                   </configuration>

  对应的资源下载地址:点击下载,原创资源转载请注明原创地址,资源中包含源代码以及视频教程,下一章讲解如何部署将该项目部署到icegrid中。

欢迎大家交流,Q~Q~:670865621
 

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落寞书生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值