一箭工作室

大家一起来学软件开发

博客园 首页 新随笔 联系 订阅 管理
 远程对象通过有WellknowActivation发布模式。这两种模式对于大多数情况下都是没有任何问题。但是,服务器端无法直接使用已发布的远程对象的属性或添加事件处理方法。有时,需求需要应用程序直接处理和管理这个远程对象。另外,服务器端可以管理发布对象的生命周期。而用其它方式,只能通过结束进程,来销毁已发布的对象。比如:双人对机游戏。如下图

问题就在于如上图左边的同一个进程中的CleintServer之间的通信。为了解决这个问题,采用了.NET Remoting动态发布方式,具体事例代码如下:

l         远程对象

和之前的远程对象代码没有什么区别?

l         服务器端

//创建信道

processResultTextBox.Text += "开始创建信道。" + Environment.NewLine;

TcpChannel serverChannel = new TcpChannel(8891);

processResultTextBox.Text += "创建信道成功。" + Environment.NewLine;

 

//注册信道

processResultTextBox.Text += "开始注册信道。" + Environment.NewLine;

ChannelServices.RegisterChannel(serverChannel, true);

processResultTextBox.Text += "注册信道成功。" + Environment.NewLine;

 

//注册远程对象

processResultTextBox.Text += "开始创建远程对象。" + Environment.NewLine;

Calculator calculator = new Calculator();

 

//创建单一实例,所有客户端都共享这个实例。

ObjRef ref1 = RemotingServices.Marshal(calculator, "CalculatorService");

processResultTextBox.Text += "成功创建远程对象。" + Environment.NewLine;

l         客户端

//创建信道

processResultTextBox.Text += "开始创建信道。" + Environment.NewLine;

TcpChannel clientChannel = new TcpChannel();

processResultTextBox.Text += "创建信道成功。" + Environment.NewLine;

 

//注册信道

processResultTextBox.Text += "开始注册信道。" + Environment.NewLine;

ChannelServices.RegisterChannel(clientChannel, true);

processResultTextBox.Text += "注册信道成功。" + Environment.NewLine;

           

processResultTextBox.Text += "开始获取远程对象。" + Environment.NewLine;

#region 服务器端激活模式

//利用RemotingConfiguration获取远程对象

RemotingConfiguration.RegisterWellKnownClientType(typeof(Calculator),

                "tcp://localhost:8891/CalculatorService");

Calcuator calculator = new Calculator();

 

posted on 2007-02-12 20:50  一箭  阅读(249)  评论(0)    收藏  举报