.net 下 Web Service & Remoting 技术
来源:互联网 发布:java输出000 编辑:程序博客网 时间:2024/05/23 01:23
随着.NET的推出,微软引入了一套新的通讯技术:Web Services和.NET remoting。.NET remoting和ASP.NET Web Services可以为建立分布式的应用提供强有力的支持。因此,为了在我们的应用程序中选择合适的技术,充分理解这两种技术的工作原理是非常必要的。
Web Services和remoting技术都支持开发分布试的应用程序和应用程序集成,但是我们需要考虑的是它们有哪些不同。在本文中将给出这两种技术的不同点,并为每一种实现给出实例以供读者更深入地理解这两种技术。
一、.NET Remoting 概述
.NET Remoting使用了一种非常有弹性的扩展性的框架。Remoting使用了.NET的一个应用程序域(AppDomain)的概念来确定它的活动性。AppDomain是一个抽象的结构,用来保证数据和代码的隔离,但并不依赖于操作系统的特殊概念,如进程或线程。一个进程可以包含多个AppDomains,但是一个AppDomain只能存在于一个进程。如果在程序中通过AppDomain调用,那么.NET Remoting将获得这个位置。如果一个对象位于同一个AppDomain中,那么这个对象被认为是本地的对象。
在.NET remoting中,所有继承于System.MarshalByRefObject的类的对象都被视为远程对象。MarshalByRefObject类提供了通过应用程序域访问远程对象的基本功能。在.NET remoting中,客户端不会直接调用方法,而是使用一个协议对象作为中转来调用远程对象中的方法。每一个在远程对象中定义的public方法都可以被客户端调用。图1为.Net Remoting的构架图:
当客户端调用远程方法时,代理首先会接收这个调用。并使用一个适当的格式来对这些调用信息进行编码,然后通过Channel将调用送到服务器。在服务端 AppDomain的一个Channel接收了这个请求,并将这个请求交给了适当的Remoting对象处理,并调用响应的方法。一位执行完方法,方法的返回值就会被送回到客户端。
Remoting框架由两种格式组成:二进制和SOAP格式。二进制格式是非常快的,并以适当的二进制格式来对方法进行编码调用。SOAP格式要比二进制格式慢,但是它允许开发人员使用SOAP格式来对远程信息进行编码。至于使用哪种方式,开发人员可以根据自己的需要决定。
二、远程对象的不同类型
(1) 独享调用:这种调用方式对于一个客户端的请求只使用一个新的远程对象。在处理完客户端请求后,这个远程对象就会被垃圾回收器回收。因此,这个远程对象并不会在两个或以上的客户端请求中共享。
(2) 共享调用:这种调用方式和独享调用的区别是这种方式可以在不同请求之间共享远程对象实例,而独享调用对每一个客户端请求创建一个单独的远程对象。
我们可以从上图看到。客户端代理从客户端接收到了请求,并将这个请求序列化成SOAP请求,并送到远程Web Service中。远程Web Service接收到SOAP请求后,开始执行这个方法,并以SOAP响应的形式将结果送回到客户端的代理,客户端代理对这些返回信息进行反序列化,并送给实际的客户端。
如果我们使用一个SOAP格式的.NET remoting,我们会发现ASP.Net Web Service的性能会比使用SOAP协议的.NET remoting(可以使用http或tcp同道)更好。因此,.NET remoting技术只有在使用TCP通道和二进制格式时才比Web service的性能更高。
ASP.NET Web services依赖于System.Xml.Serialization.XmlSerializer类通过SOAP协议来发送和接收信息。我们可以非常容易地通过加入定制的属性来控制这一切。
在这部分,我们将使用一个简单的例子来演示如何编写Web Services和远程对象。下面我们通过一个简单的远程对象开始我们的学习。
using System;
namespace RemoteClassLib
{
public class MyRemoteObject : System.MarshalByRefObject
{
public MyRemoteObject()
{
Console.WriteLine("Constructor called");
}
public string Hello(string name)
{
Console.WriteLine("Hello Called");
return "Hello " + name;
}
}
}
using System;
using System.Runtime.Remoting;
namespace RemoteClassLibServer
{
class RemoteServer
{
[STAThread]
static void Main(string[] args)
{
RemotingConfiguration.Configure(
"RemoteClassLibServer.exe.config");
Console.WriteLine("Press return to Exit");
Console.ReadLine();
}
}
}
<?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>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
namespace XmlWebServicesExample
{
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
}
[WebMethod (EnableSession=true)]
public string HelloWorld()
{
return "Hello World";
}
}
}
- .net 下 Web Service & Remoting 技术
- Web Service?.Net Remoting?
- .NET Remoting与Web Service
- .Net Remoting与Web Service
- Web Service与 .NET Remoting
- WCF,Net remoting,Web service
- WCF,Net remoting,Web service
- Web Service与 .NET Remoting
- WCF,Net remoting,Web service
- .Net Remoting与Web Service
- .Net Remoting和Web Service大比拼
- WCF,Net remoting,Web service概念
- .Net Remoting和Web Service大比拼
- 谈谈Web Service与 .NET Remoting
- 谈谈Web Service与 .NET Remoting
- .NET Remoting和Web service的比较
- WCF,Net remoting,Web service概念
- WCF,Net remoting,Web service概念
- 钩子的类型和实现
- 宽字符跟ASCII——区别及测试
- VC的对象传递给DELPHI使用
- web水晶报表pull模式解决方案
- 学习指针不可少的好文章
- .net 下 Web Service & Remoting 技术
- 实战物料主数据(MM01/MM02/MM03)屏幕增强
- Linux shell脚本编写基础
- JavaBean和反射
- SQL Server 2008的审核功能
- EOutOfResources字符异常
- 【梅花雪网页脚本控件集】MzTreeView 1.0 一次加载数据的树
- struts控制器中使用new ActionForward和mapping.findForward的区别
- Marquee 滚动的效果