65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET Remoting 示例

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.52/5 (45投票s)

2005年4月7日

2分钟阅读

viewsIcon

250487

downloadIcon

31406

展示如何使用 .NET Remoting 给初学者。

引言

我为什么要发布这个示例?

因为在 MSDN 或互联网上很难找到可用的代码。大多数示例需要复杂的配置文件,或者对于初学者来说过于复杂。这个示例可以立即运行,并且不需要配置文件。

最初的意图是通过网络远程控制从属计算机上的应用程序。主程序发送命令并等待从属程序执行远程命令,直到完成。这个示例仅发送文本字符串,但可以轻松扩展为传输任何内容。(请参阅类 cTransfer。)

特点

  • .NET Remoting 的演示。
  • 代码非常简单易懂!!
  • 不需要复杂的配置文件(端口和主机在 GUI 中指定)。
  • Master.exe(客户端)和 Slave.exe(主机)可以运行在同一台计算机(localhost)上,也可以运行在网络中的不同计算机上。
  • 多个主程序可以连接到同一端口上的一个从属程序(但不能同时连接)。
  • 主程序和从属程序的多个实例可以在不同的端口上独立地进行通信。
  • 为了使这个示例保持简单,它使用阻塞调用到从属程序。这意味着主程序会等待从属程序的响应。(这对于将命令发送到另一台计算机并在从属程序完成执行远程命令后获取结果可能很有用。)

它是如何工作的?

编程 .NET Remoting

使用 .NET Remoting 的主要方法有三种(这个示例使用第一种方法)

发布公共对象

(对象在本地创建,然后发布。)

宿主

ChannelServices.RegisterChannel (new TcpChannel(1500));
cTransfer Trans = new cTransfer();
RemotingServices.Marshal (Trans, "TestService");

客户端

cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer), 
                                 "tcp://host:1500/TestService"); 

远程创建公共对象 (SAO)

(对象应客户端请求创建)

宿主

ChannelServices.RegisterChannel (new TcpChannel(1500));
RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer), 
    "TestService", WellKnownObjectMode.Singleton);

客户端

cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer), 
                                 "tcp://host:1500/TestService");

远程创建私有对象 (CAO)

(对象在主机上创建,客户端接收对其的引用)

宿主

ChannelServices.RegisterChannel (new TcpChannel(1500));
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));

客户端

object[] attr = {new UrlAttribute("tcp://host:1500")};
object[] args = {"Sample constructor argument"};
cTransfer T = (cTransfer) Activator.CreateInstance(typeof(cTransfer), args, attr);

注释

  • cTransfer 是一个在 Remoting.DLL 中定义的类。它包含用于在主机和客户端之间通信的变量和事件。
  • 这些示例使用端口 1500。您可以使用任何未被使用且未被防火墙阻止的 TCP 端口。
  • 这里使用的端点是“TcpService”。您可以使用任何名称,但主机和客户端必须始终使用相同的端点名称!

这应该足够解释了。查看源代码:它真的非常简单!

© . All rights reserved.