0 引 言
随着工业控制技术、计算机网络和数字通信技术的快速发展,分布式测量、分布式计算和网络控制在工业生产中将越来越多地被使用。Remoting技术是在.NET环境下,在应用程序内部或应用程序域之间传输数据的方案。它有多种可以在数据传输中使用的通道,并且,在一个封闭的网络环境中,选择TCP通道将获得更好的连接性能。因此,把.NET Remoting技术运用到工业生产测控通信之中,达到及时通信、实时控制的目的,具有一定的应用价值。
1 Remoting
1.1 Remoting技术简介
Microsoft.NET Remoting提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这种框架提供了多种服务,包括激活和生存期支持,以及负责与远程应用程序进行消息传输的通信通道。可以通过使用Remoting来进行不同应用程序之间的通信,不管这些程序是在同一台计算机上,还是在局域网内的不同计算机上,甚至在Internet的不同操作系统上(当然相应的操作系统也必须实现.Net Framework)。Remoting将取代DCOM成为应用更为广泛的一种技术。
1.2 Remoting的体系结钩
.NET Remoting为分布式对象提供了一个基础结构。它使用既灵活又可扩展的管线向远程进程提供.NET的完全对象语义。Remoting体系结构主要包括以下元素:远程对象、通道、消息、格式化标志符、代理对象、RemotingConfiguration类、ChannelServices类。
图1简单地描述了.NET Remoting的结构,客户端的对象通过公共接口(代理)访问远程服务器对象的方法(或结果);对象访问和结果的传输以格式化的形式通过定义的通道进行。
图1 .NET Remoting体系结构图
1.3 Remoting技术的优缺点
Remoting技术的优点:能进行分布式开发;TCP通道的Remoting速度非常快;虽然是远程的,但是非常接近于本地调用对象;可以做到保持对象的状态;不受应用程序限制,可以是控制台、winform、IIS、windows服务承载远程对象等。
Remoting技术的缺点大体有两点:非标准的应用,因此,有平台限制;当脱离IIS时需要有自己的安全机制。
2 工业通信系统中Remoting技术的实现
在PCLevel工业生产远程测控系统的设计实现中,采用分布式三层结构的程序设计使得企业内部生产控制整体管理软件的集成得以方便实现。采用Remoting技术在业务处理层与用户层建立多个通信管道传输数据,较好地解决了企业生产的远程实时监测和控制问题,为建立企业级的快速网络进行有效的探索。
应用Remofing技术的分布式处理程序,通常包括三部分:远程对象、服务端、客户端。图2给出了PCLevel系统的数据流程。客户端通过发布命令、请求数据来调用服务器端的对象,完成各种操作。发布命令、请求数据实质上就是服务端订阅客户端事件,即由客户端发送消息,服务端捕捉该消息,然后响应该事件。
图2 PCLevel系统数据流程示意图
2.1 建立远程对象类(PCLClassLibrary.dll)
把远程对象集中编写成一个类,便于服务端和客户端的引用,同时也便于整个系统的修改升级。下面是建立远程公用类的一个例子:
[Serializable]
public class SendOrderClass:MarshalByRefObject,SendOrderIntedace
{
pubhc static event SendOrderEventHandler SendOrderEvent;
#region Send actoin to control equipment
pubic void SendAction(string equipmentIDTemp,
string actionTemp,string userlDTemp,int userLoginGradeTemp)
{
if(SendOrderEvent!=null) {
SendOnterEvent(equipmentIDTemp,actionTemp,userlDTemp,userLnginGradeTemp);
}
}
#endregion
//远程对象的生命周期设为无穷大
public override object InitializeLifetimeService()
{
retum null;
}
}
2.2 定义远程对象公共接口
为了方便系统的部署和修改升级,对远程对象类的引用定义一个公共接口。以后修改远程对象时,只需要修改或更新远程对象类即可。远程对象的公共接口(PCLCommon.d11)定义如下:
public delegate void SendOrderEventHandhr(string equipmentlIYremp,
string acfionTemp,string userIDTemp,
int userLoginGradeTemp);
public interface SendOrderInterface
{
void SendAction(string equipmentlDTemp,string actionTemp,
string userlDTemp,int userIJ09inGradeTemp);
}
2.3 服务器端的设置
在服务器端引用PCLCommon.dll和PCLCIassLi.brary.dll,定义和设置TCP通信通道,添加接收事件处理方法:
TcpChannel tcpChannelTemp 2 new TcpChannel(8090);
ChannelServices.RegisterChannel(tcpChannelTemp);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(SendOrderClass),”PCLServer—SendOrder”.Well.
KnownObjectMode.sillglecall);
///Remofing事件的定义
SendOrderClass.SendOrderEvent+’=new SendOrderEventHandler(OnAcceptedClientOrder);
当服务器端启动后,程序就侦听端口8090上的信号,一旦侦听到就立即引发事件SendOrderEvent,进而执行方法函数OnAcceptedClientOrder,分析命令内容后,调用不同的函数完成相应的操作。
2.4 客户端的设置
在客户端只需引用PCLCommon.dll即可。定义和设置TCP通信通道语句如下:
TcpChannel tcpChannelTemp 2 new TcpChannel(0);
ChannelServices.RegisterChannel(tcpChannelTemp);
sendOrder=(SendOrderInterface)Activator.GetObject(typeof(SendOrderInterface),”top://localhost:8090/PCLServerSendOrder”);
就像调用本机服务一样,客户端运行后,能够获得比较满意的传输速度。
此外,在远程服务器端和客户端分别使用配置文件,配置通信信道的建立和注册,以及远程对象的注册,方便将来重新修改信道、发布的类型或升级服务器端远程处理对象。
3 结束语
在PCLevel系统中,采用.Net Framework的成熟技术.Net Remoting实现了业务规则层和用户界面层通信,通过抽象类和接口在远程处理使得客户端和服务器端实现有效的对象信息传递。这样不仅方便系统的部署,对应用程序的升级也相当方便,不需要修改任何客户端代码,只需要在服务器端重新部署新版本的组件即可。同时,不仅保证了数据读取的速度,而且保证了数据读取的安全性,在工业生产远程数据通信实际应用中取得了极大的成功。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。