.NET Remoting和Web Service结合的分布式应用设计与实现

.NET Remoting和Web Service是NET框架下构建分布式应用的两种典型方案。.NET Remoting能提供更高的作业沟通效率,支
持更多的协议;web Senrice能实现不同系统、不同平台、易管理的分布式应用。

  1 .NET框架下的两种分布式技术

    1.1 基于.NET远程处理的分布式技术

      NET Remoting可用于网络上不同计算机的基于CLR的不同应用程序之间的通信,也可在相同计算机的基于CLR不
同应用之间的通信。NET Remoting是基于进程间通信的机制,进程问通信需要一个向其进程外的调用方提供功能的服
务器对象、一个在服务器对象上进行调用的客户端以及一个将调用从一端运送另一端的传输机制。客户调用服务器对象
的方法要么创建对象的完整副本,并移动到客户端,即值调度;要么向客户端进程传递一个对服务器对象的引用,实现引
用调度(MBR)。

   1.2基于web服务的分布式技术

   web service允许在不同平台上以不同语言编写的各种程序,以基于标准的协议相互通信,任何系统甚至是完全不同
的平台都可以用常用的Intemet标准(HTTP,XML,SOAP)访问它,只要保持接口不变,对web service实现的任何更新,客
户应用程序都无须改变,无论它是基于WindoWs的用户还是其他平台(如UNIX)的应用。因此系统具有更高的复用性、可伸缩性和跨平台特征。

1.3比较和评价

Web Service和NET Remoting作为两种典型的.NET框架下的分布式应用方案,各自有其优点和适用的平台。
1)Web Service和NET Remoting都支持事务处理机制、负载均衡和语言无关性;
2)从适用平台上来看,web service可以响应来自任何支持HTTP,XML,SOAP协议的平台请求,而.NET Remoting只
能支持构建在CLR基础上的托管应用程序。Web Service更能实现异构系统、跨平台系统的集成,并且易于部署;

3)从执行效率和速度上来看,Web Service只能支持XML,S0AP消息文本数据,并附带较多的格式数据,这种数据
类型从计算机的角度,是很难以最有效率的方式进行处理;.
NET Remoting既支持XML,SOAP的消息文本数据,又能支持基于TCP channel信道的二进制数据,在数据的定义上能以最
有效率的方式表达。NET Remoting较Web Service具有更高的执行效率;
4)从支持的协议和安全性来看,.NET Remoting除了支持HTTP,XML,SOAP协议外,还支持基于二进制的TCP协
议,并且比web Service具有更高的安全性。

综上所述,如果为了实现不同系统、不同平台、易管理的分布式应用则采用web Service是可选的方案,如果需要得到
更多协议支持、更高的沟通作业效率则可以采用基于.NET Remoting远程处理的分布式应用方案。

2 分布式应用

目前操作系统还是Windows占据了绝大部分的市场,所以在开发应用程序时,采用.NET Remoting是一个很好的解决
方案;但是仍然存在同其他语言平台通信的情况,.NETRemoting不能够满足所有的需求。

2.1系统框架

提出了一种.NET Remoting和web Senrice相结合的系统框架,在.NET Remoting的标准框架上加入Web Service

作为其他平台进入NET Remoting的一个代理。该框架是分布式处理的实现框架,如图


使用.NET Remoting搭建信息集成系统,能在集成系统内部提供高效可靠的分布式服务,满足内部业务处理的要
求。对不属于系统内部的其他子系统,由于数据传输量较小,而且传输时间要求不高,在集成系统内部设置一个
webservice代理,由web Senrice来访问系统内部数据,把数据传送到系统外部。Web Service能够方便的实现信息同各种不
同语言的应用程序的通信,web Service只使用80端口,也减少了系统的安全隐患。

该系统在各个.NET应用之间提供高效的分布式服务的同时,能够通过web service提供跨平台的分布式服务,最大
限度上利用了中间层代码,简化开发,减少针对不同平台需求的二次开发。


2.2系统实现

2.2.1建立基于.NET Remoting的信息集成系统

  1)使用AD0.NET访问数据库

远程对象的发布:

1  TcpChannel chan= new TcpChannel(4100)
2  ChannelServices.RegisterChannel(chan)
3  RemotingConfiguration.RegisterWellKnowServiceType(typeof(DbServerLibrary.DbServer),"DbServer",WellKnownObjectMode.Singleton)
4 

远程对象的获取:

1 dbServer = (DbServerLibrary.DbServer)
2 Activator.GetObject(typeof(DbServer.DbServer),"tcp://192.168.1.1:4108/DbServer")

2)编写中间业务层代码

Namespace com.pms.dao
{
  
public class FightDao
  
   {
     
public FightDao(){}
     
public DataTable fightArrived(DataTable data){...}
     
public DataTable fightCanceled{DataTabel data}{}
     ...
   }
  
}

中间层通过AD0.NET访问数据库。

3)编写远程服务组件

1 public class FightService:marshalByRefObject
2 {
3   //远程对象对系统内部的接口方法
4   
5 }

.NET Remoting有两种预定义信道:tcp和http。

2.2.2建立Web Service 代理

1 Public Class BaseService
2     Inherits System.Web.Services.WebService
3     <WebMethod(Description:="获得你的cName是名称")> _
4       Public Function getHotelObjByName(ByVal cName As StringAs HotelClass
5         With New HotelSystem
6             Return .getHotelObjByName(cName)
7         End With
8     End Function

这里webservice只是对.NET Remoting作了一个封装,它和.NET Remoting的远程服务组件具有相同的接口。通过web service代理,使其他语言平台的程序也能够访问.NET Remoting的服务。

原文地址:https://www.cnblogs.com/callbin/p/1653666.html