问题就在于如上图左边的同一个进程中的Cleint和Server之间的通信。为了解决这个问题,采用了.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();
浙公网安备 33010602011771号