使用ICE,我可以使用以下命令启动单个服务器:
iceboxnet.exe --Ice.Config=config.icebox
(下载ICE v3.4.1 演示源并查看目录“Ice-3.4.1-demos\democs\IceGrid\simple”)
问题:如何在同一个冰箱中启动两台服务器,每台服务器都包含在一个单独的 .dll 文件中?
使用ICE,我可以使用以下命令启动单个服务器:
iceboxnet.exe --Ice.Config=config.icebox
(下载ICE v3.4.1 演示源并查看目录“Ice-3.4.1-demos\democs\IceGrid\simple”)
问题:如何在同一个冰箱中启动两台服务器,每台服务器都包含在一个单独的 .dll 文件中?
关键在用户手册中:“43.3.4:配置服务”:
属性的名称部分是服务名称(在本例中为 IceStorm)。此名称被传递给服务的启动操作,并且在同一 Icebox 服务器中配置的所有服务中必须是唯一的。
所以 - 你需要为每个服务有不同的接口名称(这很有意义:它需要每个服务的唯一名称)。我们需要复制接口“hello”,并将其命名为“hello2”。
向 config.icebox 添加额外的一行:
# The hello service (2 identical copies)
IceBox.Service.Hello=helloservice.dll:HelloServiceI --Ice.Config=config.service
IceBox.Service.Hello2=helloservice2.dll:Hello2ServiceI --Ice.Config=config2.service
创建 config.service 的副本,将其命名为 config2.service,并更改名称和端口:
Hello.Endpoints=tcp -p 10000:udp -p 10000:ssl -p 10001
...编辑为:
Hello2.Endpoints=tcp -p 20000:udp -p 20000:ssl -p 20001
现在,我们需要编译一个新版本的“helloservice.dll”,它使用“hello2”作为接口。浏览 C# 项目,将所有“hello”重命名为“hello2”,将编译的输出从“helloservice.dll”重命名为“helloservice2.dll”。
现在,这两个服务将在同一个冰箱下启动,如果您通过更改 .config 文件打开登录:
C:\Program Files (x86)\ZeroC\Ice-3.4.1\Ice-3.4.1-demos\democs\IceBox\hello>iceboxnet.exe --Ice.Config=config.icebox
-- 3/2/2011 15:10:32:316 iceboxnet.exe-Hello: Network: attempting to bind to tcp socket 0.0.0.0:10000
-- 3/2/2011 15:10:32:373 iceboxnet.exe-Hello: Network: accepting tcp connections at 0.0.0.0:10000
local interfaces: 192.168.1.10, 127.0.0.1
-- 3/2/2011 15:10:32:382 iceboxnet.exe-Hello: Network: attempting to bind to udp socket 0.0.0.0:10000
-- 3/2/2011 15:10:32:429 iceboxnet.exe-Hello: Network: starting to receive udp packets
local address = 0.0.0.0:10000
local interfaces: 192.168.1.10, 127.0.0.1
-- 3/2/2011 15:10:32:457 iceboxnet.exe-Hello: Network: attempting to bind to ssl socket 0.0.0.0:10001
-- 3/2/2011 15:10:32:507 iceboxnet.exe-Hello: Network: accepting ssl connections at 0.0.0.0:10001
local interfaces: 192.168.1.10, 127.0.0.1
-- 3/2/2011 15:10:32:649 iceboxnet.exe-Hello: Network: published endpoints for object adapter `Hello':
tcp -h 192.168.1.10 -p 10000:udp -h 192.168.1.10 -p 10000:ssl -h 192.168.1.10 -p 10001
-- 3/2/2011 15:10:32:745 iceboxnet.exe-Hello2: Network: attempting to bind to tcp socket 0.0.0.0:20000
-- 3/2/2011 15:10:32:794 iceboxnet.exe-Hello2: Network: accepting tcp connections at 0.0.0.0:20000
local interfaces: 192.168.1.10, 127.0.0.1
-- 3/2/2011 15:10:32:795 iceboxnet.exe-Hello2: Network: attempting to bind to udp socket 0.0.0.0:20000
-- 3/2/2011 15:10:32:839 iceboxnet.exe-Hello2: Network: starting to receive udp packets
local address = 0.0.0.0:20000
local interfaces: 192.168.1.10, 127.0.0.1
-- 3/2/2011 15:10:32:840 iceboxnet.exe-Hello2: Network: attempting to bind to ssl socket 0.0.0.0:20001
-- 3/2/2011 15:10:32:885 iceboxnet.exe-Hello2: Network: accepting ssl connections at 0.0.0.0:20001
local interfaces: 192.168.1.10, 127.0.0.1
-- 3/2/2011 15:10:33:021 iceboxnet.exe-Hello2: Network: published endpoints for object adapter `Hello2':
tcp -h 192.168.1.10 -p 20000:udp -h 192.168.1.10 -p 20000:ssl -h 192.168.1.10 -p 20001
-- 3/2/2011 15:10:33:027 iceboxnet.exe: Network: attempting to bind to tcp socket 127.0.0.1:9996
-- 3/2/2011 15:10:33:027 iceboxnet.exe: Network: accepting tcp connections at 127.0.0.1:9996
-- 3/2/2011 15:10:33:034 iceboxnet.exe: Network: published endpoints for object adapter `Ice.Admin':
tcp -h 127.0.0.1 -p 9996
更新
呻吟。上面的所有代码都不是绝对必要的(除非您正在创建两个服务)。我需要做的就是重命名相应的接口,请参阅ZeroC 论坛和如何在一个冰箱中运行两个服务?
只需重命名接口即可。请参阅ZeroC 论坛以及如何在一个冰箱中运行两个服务?