Net Remoting和Web Service浅析

.Net
Remoting和Web Service浅析(转)

随着.NET的推出,微软引入了一套新的通讯技术:Web Services和.NET
remoting。.NET remoting和ASP.NET Web
Services可以为建立分布式的应用提供强有力的支持。因此,为了在我们的应用程序中选择合适的技术,充分理解这两种技术的工作原理是非常必要的。

Web
Service技术使用了HTTP、XML和SOAP技术进行通 讯,因此,Web
Service是跨平台的和真正的跨越防火墙的B2B应用集成技术。由于Web
Services需要依赖商业标准在Internet上提供服务,因此,这种技术是语言、平台和设备独立的。Remoting技术可以允许程序和软件通过
应用程序域、进程和不同机器之间进行交互。这将使我们的应用程序可以使用在网络环境中的远程资源。     Web
Services和remoting技术都支持开发分布试的应用程序和应用程序集成,但是我们需要考虑的是它们有哪些不同。在本文中将给出这两种技术的不同点,并为每一种实现给出实例以供读者更深入地理解这两种技术。

一、.NET
Remoting
概述

.NET Remoting使用了一种非常有弹性的扩展性的框架。Remoting使用了.NET的一个应用程序域(AppDomain)的概念来确定它的活动性。AppDomain是一个抽象的结构,用来保证数据和代码的隔离,但并不依赖于操作系统的特殊概念,如进程或线程。一个进程可以包含多个AppDomains,但是一个AppDomain只能存在于一个进程。如果在程序中通过AppDomain调用,那么.NET Remoting将获得这个位置。如果一个对象位于同一个AppDomain中,那么这个对象被认为是本地的对象。

本文的原地址:http://blog.csdn.net/zengjibing/archive/2009/02/21/3918831.aspx

在.NET remoting中,所有继承于System.MarshalByRefObject的类的对象都被视为远程对象。MarshalByRefObject类提供了通过应用程序域访问远程对象的基本功能。在.NET remoting中,客户端不会直接调用方法,而是使用一个协议对象作为中转来调用远程对象中的方法。每一个在远程对象中定义的public方法都可以被客户端调用。图1为.Net Remoting的构架图:

图1    当
客户端调用远程方法时,代理首先会接收这个调用。并使用一个适当的格式来对这些调用信息进行编码,然后通过Channel将调用送到服务器。在服务端
AppDomain的一个Channel接收了这个请求,并将这个请求交给了适当的Remoting对象处理,并调用响应的方法。一位执行完方法,方法的
返回值就会被送回到客户端。    
Remoting框架由两种格式组成:二进制和SOAP格式。二进制格式是非常快的,并以适当的二进制格式来对方法进行编码调用。SOAP格式要比二进制格式慢,但是它允许开发人员使用SOAP格式来对远程信息进行编码。至于使用哪种方式,开发人员可以根据自己的需要决定。
二、远程对象的不同类型

远程构架允许我们建立两个不同类型的远程对象。

1.客户端对象:这种类型的远程对象是一个在客户端进行创建和销毁的服务端对象。这种远程对象的实例在客户端调用服务端对象的一个新操作时创建。对象实例的生命周期和客户端有关。一但客户端不太需要远程对象后,这个对象就会被垃圾回收器回收。

2.
服务端对象:这种对象的生命周期被远程服务器管理,而并不是由客户端创建的对象。这种对象和客户端对象的区别是当对象完成工作后,远程对象由客户端控制。
也就是说,当客户端调用新的远程对象或是Activator.GetObject时,服务端对象并不被创建。有两种类型的服务端对象。它们是:

(1)独享调用:这种调用方式对于一个客户端的请求只使用一个新的远程对象。在处理完客户端请求后,这个远程对象就会被垃圾回收器回收。因此,这个远程对象并不会在两个或以上的客户端请求中共享。   
(2)共享调用:这种调用方式和独享调用的区别是这种方式可以在不同请求之间共享远程对象实例,而独享调用对每一个客户端请求创建一个单独的远程对象。

三、ASP.NET Web
Services
概述

在.NET中建立一个ASP.NET Web Service是一项非常简单的工作。为了建立一个Web Service,我们需要建立一个Web
Service类,这个类从System.Web.Services.WebService继承,并使用WebMethod属性公开一些Web
Service方法。一但这项工作做完。这些方法就可以通过SOAP和HTTP协议进行调用。

使用一个Web
Service也是非常简单和直接的。我们可以使用wsdl.exe或使用VS.NET的开发环境建立一个代理类。这个代理隐藏了调用了Web
Service的复杂性,并使Web Service看起来就象是调用本地对象一样。

  
我们可以从上图看到。客户端代理从客户端接收到了请求,并将这个请求序列化成SOAP请求,并送到远程Web
Service中。远程Web
Service接收到SOAP请求后,开始执行这个方法,并以SOAP响应的形式将结果送回到客户端的代理,客户端代理对这些返回信息进行反序列化,并送给实际的客户端。

四、ASP.NET Web
Services
NET
Remoting
的对比

现在我们已经理解了.NET
remoting和Web
Services的基本概念。现在让我们来看看这两种技术有什么具体的不同。为了这个目的,我将它们的不同分为性能、状态管理等方面进行阐述。

1. 
性能

从性能方面,.NET
remoting在使用TCP通道和二进制格式时拥有更快的通讯速度。而关于Web
Services的主要焦点就集中在性能上。由于XML的冗长而使得用SOAP协议序列化出来的传输数据要比二进制数据流更慢。另外,处理字符串要比直接
处理二进制更慢。然而,如果我们的Web service要进行的工作主要是计算操作,可以在服务端使用缓冲技术来增加web service的性能。
   如 果我们使用一个SOAP格式的.NET remoting,我们会发现ASP.Net Web
Service的性能会比使用SOAP协议的.NET remoting(可以使用http或tcp同道)更好。因此,.NET
remoting技术只有在使用TCP通道和二进制格式时才比Web service的性能更高。

2.
状态管理

Web
services是一种无状态的编程模型,这就意味着需要单独处理 每一个请求。另外,客户端每一次调用web
services,服务端会为这个请求建立一个新的对象。这个对象在所有的方法调用完后销毁。为了在请求之间维护状态,我们可以使用和ASP.NET页同
样的技术。如Session和Application对象,或是为我们的解决方案定制一个解决方案。但我们要清楚的是,在Web
Service中维护状态的成本是非常高的。

.NET
remoting支持多种方式的状态管理。我们可以从中选择适当
的解决方案。在前面提到过,SingleCall对象是无状态的,Singleton对象可以共享所有客户端的状态,并且客户对象在每一个客户端维护状
态。如果我们不需要维护状态,可以使用singlecall对象,如果我们需要维护状态,可以一起使用singlecall和singleleton对
象。

3. 
安全

.NET
remoting并不支持跨平台的安全调用。但由于.NET
remoting对象运行在IIS中,因此可以使用IIS的所有的安全特性。如果我们在其它的非IIS容器中使用TCP或HTTP通道,那么我们必须自已实现验证,授权等机制。

web
service和.NET
remoting一样,也运行在IIS中,同样也可以使用IIS所提供的安全机制,如SSL、授权等。

4.
可靠性

.NET
remoting可以将任何程序作为远程对象,如Windows
Form、服务程序、控制台或ASP.NET工作进程等。如果我们将Windows服务或控制台程序作为远程对象,那么我们需要确认所提供的服务特性是否
符合远程对象的要求。然而如果我们在IIS中提供远程对象,那么我们可以利用ASP.NET工作进程的两个特性:自动开始和线程安全。对于ASP.NET Web
service来说,可靠性并不是经常需要考虑的因素,因此它可以利用IIS在这方面的能力。

5.
可扩展性

ASP.NET Web services和.NET
remoting框架都是可扩展的。我们可以过滤内部和外部的信息,控制各种类型的组件和元数据的产生。.NET remoting可以扩展到下一层,以允许我们实现自己的格式化程序和通道。    
ASP.NET Web services依赖于System.Xml.Serialization.XmlSerializer类通过SOAP协议来发送和接收信息。我们可以非常容易地通过加入定制的属性来控制这一切。

五、实例

在这部分,我们将使用一个简单的例子来演示如何编写Web
Services和远程对象。下面我们通过一个简单的远程对象开始我们的学习。

1.
建立一个远程对象

为了建立这个远程对象,我们需要写一个从MarshalByRefObject继承的。代码如下如示:

using System;
namespace RemoteClassLib { publicclass MyRemoteObject : System.MarshalByRefObject {
public MyRemoteObject() { Console.WriteLine("Constructor called"); } publicstring
Hello(string name) {
Console.WriteLine("Hello
Called"); return"Hello
"+ name; } }
}

上面的代码非常简单和直接。一开始有一个从MarshalByRefObject.继承的类。然后我们加入了这个类的构造方法,并将一条信息输出到控制台。然后我们写一个Hello方法用于返回一个值。一但这个远程对象被建立,下一步就是建立一个控制台应用程序来从配置文件中读远程对象的信息。

using System;
using System.Runtime.Remoting; namespace
RemoteClassLibServer { class RemoteServer { [STAThread] staticvoid
Main(string[] args) {
RemotingConfiguration.Configure( "RemoteClassLibServer.exe.config");
Console.WriteLine("Press
return to Exit");
Console.ReadLine(); } } }

在上面的main方法中,我们只是使用RemotingConfiguration.Configure方法从配置文件中读入配置信息。并等待客户端连接它。上面所使用的配置文件的形式如下:

<?xml
version="1.0" encoding="utf-8" ?><configuration><system.runtime.remoting><application name="RemoteClassLibServer"><service><wellknown mode="SingleCall" type="RemoteClassLib.MyRemoteObject,RemoteClassLib"
objectUri="MyRemoteObject"></wellknown></service><channels><channel ref="tcp server"
port="9000"/></channels></application></system.runtime.remoting></configuration>

一但服务器程序被启动,然后这个客户端应用程序就可以开始建立远程对象的实例,并且调用相应的方法。在下一部分,我们将理解建立ASP.NET
web services的过程。

2.
建立一个ASP.NET Web Service

在前面曾提及,使用VS.NET建立一个ASP.NET Web Service是非常容易的。只需要使用ASP.NET Web
Service模板建立一个Web
Service工程。并输入工程名。一位工程被建立。将service1.asmx文件的内容为如下的形式:

using System;
using System.Collections; using
System.ComponentModel; using System.Data; using
System.Diagnostics; using System.Web; using
System.Web.Services; namespace XmlWebServicesExample { publicclass Service1 : System.Web.Services.WebService {
public Service1() { } [WebMethod
(EnableSession=true)] publicstring HelloWorld() { return"Hello
World"; } } }

我们可以从上面的代码看出,Web
Service类名为Service1,从System.Web.Services.WebService继承。从WebService类继承是可选的,
这主要是为了可以访问类似的ASP.NET对象,如Application、Session、User和Context。然后我们还加入了一个叫
HelloWorld的方法,这个方法返回一个简单的字符串给Web
Service的调用者。在HelloWorld方法的WebMethod属性中,我们还通过EnableSessionn属性指定ASP.NET Web
service的会话状态为打开。

六、结论

.NET
remoting和ASP.NET Web
Service都是非常强大的技术,这两种技术都提供了适当的框架来开发分布式的应用程序。充分理解这两种技术如何工作,并如何正确选择它们是非常重要
的。如果应用程序要求互操作性,并且必须在公共网络中,Web Services将是最好的选择。如果要求和其他的.NET组件进行通讯,并且性能非常关键,那么.NET
Remoting技术是最好的选择。总而言之,当我们需要从不同的计算平台发送和接收数据时,使用Web
Service,而需要在.NET应用程序之间进行通讯时,就需要使用.NET remoting技术。在一些应用环境中,我们可以将Web Service和.NET
remoting联合起来使用。这样会有更好的效果。

Net Remoting和Web Service浅析

时间: 2024-08-11 01:01:58

Net Remoting和Web Service浅析的相关文章

WCF、Net remoting、Web service概念及区别

Windows通信基础(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK). WCF就是微软对于分布式处理的 编程技术的集大成者,它将DCOM.Remoting.Web Service.WSE.MSMQ集成在一起,从而降低了分布式系统开发者的学习曲线,并统一了开发标准. WCF是建立在.Net Framework 2.0基础之上的,包含在.NET 3.0/3.5

Remoting三种信道Http,Tcp,IPC和Web Service的访问速度比较(转)

Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了.到底选择那种,当然还有访问效率上的考虑,同时在Remoting中又有三中信道 Http,Tcp,Ipc,它们又各有差别.HTTP方式的信道在跨越防火墙上有优势:TCP方式的信道常用在局域网内通信,速度比HTTP快很 多:IPC信道用于同一台机器的进程间通信,通信不占用网络资源,速度又比TCP快很多.为了能够实际的比较一下这

测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)

Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了.到底选择那种,当然还有访问效率上的考虑,同时在Remoting中又有三中信道Http,Tcp,Ipc,它们又各有差别.HTTP方式的信道在跨越防火墙上有优势:TCP方式的信道常用在局域网内通信,速度比HTTP快很多:IPC信道用于同一台机器的进程间通信,通信不占用网络资源,速度又比TCP快很多.为了能够实际的比较一下这四者

Web Service和WCF的到底有什么区别

[1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.  

面试题:Web Service与wcf的区别

Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.     

Web Service和WCF的区别。其实二者不属于一个范畴!!!

Web Service和WCF的区别 [1]Web Service:严格来说是行业标准,也就是Web Service 规范. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是跨语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.     

Web Service简介

1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册. XML:(Extensible Markup Language)扩展型可标记语言.面向短期的临时数据处理.面向万维网络,是Soap的基础. Soap:(Simple Object A

Web Service 和WCF

Web Service 的工作原理 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册.WebService可用基于XML的SOAP来表示数据和调用请求,并且通过HTTP协议来传输这些XML格式的数据. webservice最大优点就是实现异构平台间的互通,这也是使用WebS

什么情况下应该使用Web Service?

现在我将列举三种情况,在这三种情况下,你将会发现使用Web service会带来极大的好处.此后,我还会举出不应该使用Web service的一些情况. 跨越防火墙的通信 如果你的应用程序有成千上万的用户,而且他们都分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题.那是因为客户端和服务器之间通常都会 有防火墙或者代理服务器.在这种情况下,你想使用DCOM就不是那么简单了,而且,通常你也不愿意把你的客户端程序发布到如此庞大数量的每一个用户手中. 于是,你最终选择了用浏览器作为客户端,