随笔 - 64, 文章 - 0, 评论 - 373, 引用 - 15
数据加载中……

Remoting系列(一)----Remoting的基本概念

Remoting技术简介

一 Remoting技术出现的背景

1)分布式应用需求的迅速增长(Peer-to-Peer, Grid等技术的出现)
2)原有的C/S, B/S模式和技术已经不能胜任(串口RS232,Socket,RPC,DCOM技术各有缺点)


二 什么是
Romoting?

采用分布式进行编程的一种技术,Remoting主要用于管理跨应用程序域的同步和异步RPC 会话。在默认情况下,Remoting使用 HTTP 或 TCP 协议,并使用 XML 编码的 SOAP 或本机二进制消息格式进行通信。.NET Remoting 提供了非常灵活和可扩展的编程框架,并且他可以管理对象的状态。

Remoting优点:
1)  性能: 如果调优.Net Remoting 的性能,那么他的性能非常好,速度接近DCOM.
2) 可扩展:.Net Remoting 可供你选择传输通道类型(如Http,Tcp)和格式类型(如Binary,Soap)。
3) 可配置:可以通过配置文件配置应用程序。
4) CLR和CTS的好处:由于.NET Remoting是基于.NET框架的,所以他拥有Common Type System(CTS) 和 Common Language Runtime(CLR)所拥有的易于使用和功能强大的特点。
5)互用性(Interoperability): .NET Remoting 支持开发标准(Http,SOAP,WSDL,XML).
6) 安全性
7) 生命周期管理


三 Remoting架构:

 Remoting通过通道(channel)来传输消息。.NET Remoting支持两种默认的协议支持通道(Http和Tcp).


四 远程对象的两个含义

操作远程对象:对象运行在远程,客户端向他发送消息.
传递远程对象:将远程的对象拿到本地,或者将本地对象发送过去,然后我们可以对副本进行操作.


五 激活对象的两种方式:
服务器激活和客户端激活

1 服务器激活:
“服务器激活的对象”是由服务器控制生存期的对象。它们只在客户端调用对象的第一个方法时,根据需要由服务器创建。服务器激活的对象只支持默认的构造函数。
代码:

<service>
  
<wellknown mode="SingleCall" type="Hello.HelloService, Hello" 
                   objectUri
="HelloService.soap" />
</service>

上面描述了一个服务器激活的 (wellknown) 类型,其激活方式设置为 SingleCall

服务器激活的对象有两种激活模式:SingletonSingleCall.
1) Singleton(单实例):
这些对象遵循传统的Singleton 设计模式,在这种模式中,任何时候内存中都只有一个实例,所有客户端都接受该实例提供的服务。
特点:
a.在服务器段只实例化一次,以后每次调用都访问同一个实例。
b.可以维持状态

2) SingleCall(单调用)
SingleCall 远程服务器类型总是为每个客户端请求设置一个实例。下一个方法调用将改由其他实例进行服务。从设计角度看,SingleCall 类型提供的功能非常简单。这种机制不提供状态管理,如果您需要状态管理,这将是一个不利之处;如果您不需要,这种机制将非常理想。也许您只关心负载平衡和可伸缩性而不关心状态,那么在这种情况下,这种模式将是您理想的选择,因为对于每个请求都只有一个实例。如果愿意,开发人员可以向 SingleCall 对象提供自己的状态管理,但这种状态数据不会驻留在对象中,因为每次调用新的方法时都将实例化一个新的对象标识。
特点:
a.每次调用都实例化新的实例
b.更好地支持无状态编程模型

2 客户端激活
“客户端激活的对象”是当客户端调用 newActivator.CreateInstance() 时在服务器上创建的。
代码:

<service>
  
<activated type="Hello.HelloService, Hello" 
             objectUri
="HelloService.soap" />
</service>

上面描述了一个客户端激活的类型。请注意,我们不再需要 URL,因为对于客户端激活的类型,类型本身就足以激活了。另外,wellknown 标记已被 activated 标记替代。

六 Remoting VS Web Service

这两者都是基于分布式的开发,而且.Net Remoting有时也可以配置为Web Service,两者有很多的相同之处。

一般来讲,我把他们的不同之处列为5个方面。

1) 开发部署
 WebService开发和部署比较简单,Remoting相对WebService开发和部署要稍复杂。
2) 协议的开放性 
    两者都可支持HTTP,TCP,SMTP等多种协议。
    [一直以为WebService只支持HTTP协议,经idior指点,原来在Web Services Enhancements已有介绍,WebService也支持TCP,SMTP等协议。微软最新发布的wse应该是wse 3.0,以前还没听说过,真是汗颜!]
   更详细的内容待续...
3) 支持的类型系统
 WebService只支持XSD类型系统,对象的类型的序列化受到限制,而Remoting可以通过序列化为Binary传输数据,支持更为广泛的数据类型
4) 安全性
 
由于 ASP.NET Web 服务依赖于 HTTP,因此它们与标准的 Internet 安全性基础结构相集成。ASP.NET 利用 IIS 的安全性功能,为标准 HTTP 验证方案(包括基本、简要、数字证书,甚至 Microsoft .NET Passport)提供了强有力的支持。
 一般情况下,.NET Remoting 管线不能确保跨进程调用的安全。使用 ASP.NET 托管于 IIS 中的 .NET Remoting 端点可以利用 ASP.NET Web 服务可用的所有安全性功能,包括对使用 SSL 确保有线通信的安全性的支持。
5) 性能
从原始性能方面来讲,使用 TCP 信道和二进制格式化程序时,.NET Remoting 管线能够提供最快的通信。一般情况下,.NET Remoting的性能要比WebService高。

posted on 2006-07-20 10:40 Ring 阅读(3575) 评论(28)  编辑 收藏 所属分类: B .Net 开发

评论

#1楼    回复  引用  查看    

希望坚持写完...期待
2006-07-20 11:42 | stonezhu      

#2楼    回复  引用  查看    

WebService只支持HTTP协议 这个不对
你还应该比较remoting 和ws的开放性,这个是它们最主要的区别。
2006-07-20 11:43 | idior      

#3楼 [楼主]   回复  引用  查看    

@idior
谢谢idior,下班回去我再仔细查阅资料。 有误之处然后修正过来!欢迎大家提出意见和建议!
2006-07-20 11:47 | Ring      

#4楼    回复  引用  查看    

Remoting也能用Http Formatter。还有,这样的文章,放到.net新手区吧?
2006-07-20 12:21 | U2U      

#5楼    回复  引用    

赞成 idior的回复。
它们两个的最大区别是web service为业界公认标准。.net remoting是ms自己的东东

#6楼    回复  引用  查看    

WS 和 .net Remoting都可以用Tcp和Http信道,都可以用Binary 和 Soap Formatter。主要是:
1、WS是业界标准,Remoting是.net框架的一部分
2、WS总是需要“服务端”,而利用Remoting完全可以构建对等的客户端而不需要“服务器”
3、从实现WS和Remoting的类的种类来说,他们也是不同


作者出发点是好的,但是似乎作者自身也没没有弄明白这二者,恐怕会误人子弟哦
2006-07-20 12:57 | U2U      

#7楼    回复  引用  查看    

1) 开发部署
 WebService开发和部署比较简单,Remoting则需要较为复杂的编程。

这里也不正确,Remoting也是很简单的。我不明白作者所指的“复杂”是什么定义。如果希望简便,Remoting允许你编写配置文件,然后用Configure方法读取,其余的.net会帮你搞定
2006-07-20 12:59 | U2U      

#8楼    回复  引用  查看    

不过也因为他们属于的标准颗粒不同,WS通常用于实现跨平台,而.net Remoting常被用作内部局域网协作而取得较好的效果
2006-07-20 13:00 | U2U      

#9楼    回复  引用  查看    

“WS通常用于实现跨平台,而.net Remoting常被用作内部局域网协作而取得较好的效果”

正解!
2006-07-20 13:08 | TerryLee      

#10楼    回复  引用    

Remoting 是个好东西,但似乎MS对它越来越泠淡。

个人感觉WS有点像鸡肋
2006-07-20 13:09 | shaoye [未注册用户]

#11楼    回复  引用  查看    

所以才会有WCF啊
2006-07-20 13:14 | lovecherry      

#12楼    回复  引用    

@idior
"WebService只支持HTTP协议 这个不对 "

不对吗?(不讨论还有https)
2006-07-20 13:37 | yifeng [未注册用户]

#13楼 [楼主]   回复  引用  查看    

@U2U
Remoting也能用Http Formatter。还有,这样的文章,放到.net新手区吧?

假如大部分人没意见,还是放在这里给大家拍砖吧。由于本人对webService了解有限,在Remoting VS Web Service比较中,参考了较多他人的意见。若有不当之处,希望大家指出来,我会及时更正,希望对大家有帮助!
2006-07-20 13:39 | Ring      

#14楼 [楼主]   回复  引用  查看    

@idor
@yifeng

"WebService只支持HTTP协议 这个不对 "
不对吗?(不讨论还有https)

这里我参考了Priya Dhawan和Tim Ewald说法:

Although the SOAP specification does not mandate HTTP as the transport protocol, the client can access Web services implemented using ASP.NET Web services only over HTTP, because it is the only transport protocol ASP.NET supports. The services are invoked via IIS and execute in the ASP.NET worker process, aspnet_wp.exe.
尽管 SOAP 规范并不要求用 HTTP 作为传输协议,但是客户端使用 ASP.NET Web 服务只能通过 HTTP 访问,因为它是 ASP.NET 支持的唯一(the only)一种传输协议。服务是通过 IIS 调用的,并在 ASP.NET 的辅助进程 aspnet_wp.exe 中执行。

该文地址:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdadotnetarch16.asp

我想在客户端使用 ASP.NET Web 服务只能通过 HTTP 访问还是应该正确的吧!


2006-07-20 13:46 | Ring      

#15楼 [楼主]   回复  引用  查看    

@U2U
1) 开发部署
 WebService开发和部署比较简单,Remoting则需要较为复杂的编程。

这里也不正确,Remoting也是很简单的。我不明白作者所指的“复杂”是什么定义。如果希望简便,Remoting允许你编写配置文件,然后用Configure方法读取,其余的.net会帮你搞定

简单和复杂是相对而言的,我个人觉得部署Remoting较WebService还是要复杂点。

后文我会继续介绍一下如何用配置文件来部署开发Remoting程序,希望对初学者有帮助。 也希望到时U2U能给提出批评。
2006-07-20 13:55 | Ring      

#16楼    回复  引用    

SOAP都是没规定和传输协议的关系,它只是一种XML规范。
但WebService是用HTTP的,应该没错吧,不仅仅是ASP.NET的说。

2006-07-20 13:59 | yifeng [未注册用户]

#17楼    回复  引用    

我是用过Remoting进行系统的应用编程,其实一点也不复杂
2006-07-20 14:37 | 游客 [未注册用户]

#18楼 [楼主]   回复  引用  查看    

@游客
"Remoting则需要较为复杂的编程"确实不妥,现已修改成"Remoting相对WebService开发和部署要稍复杂"
个人意见,仅供参考!
2006-07-20 14:46 | Ring      

#19楼    回复  引用  查看    

2、WS总是需要“服务端”,而利用Remoting完全可以构建对等的客户端而不需要“服务器” ??
__
有这样一回事?没有IIS的支持Remoting服务可以启动?

5) 性能
说得很泛,在设计上一不注意两者性能都会很糟糕,楼主可以测不同数据量、不同并发用户两者的差距。
MS也有两者的详细性能测试报告。
http://www.microsoft.com/china/msdn/archives/library/dnbda/html/bdadotnetarch14.asp
2006-07-20 16:28 | henry      

#20楼    回复  引用  查看    

ws支持http tcp smtp msmq
其中重点使用的是http和消息队列,一个支持同步一个支持异步。
这些在wse中已经实现。ws绝对不是鸡肋。ws是企业集成中的重要技术方案。
remoting主要用于.net to .net的分布式应用。

你引用的文章是2002,too old.
advanced remoting是本学习remoting的好书。
2006-07-20 18:03 | idior      

#21楼 [楼主]   回复  引用  查看    

迅速查看资料。果然没错!
引用http://msdn.microsoft.com/webservices/webservices/building/wse/default.aspx?pull=/library/en-us/dnwse/html/newwse3.asp
中的介绍:
Web Services Enhancements, or WSE, and often pronounced as "Wizzy," is a developer tool that abstracts you away from much of the specification detail when incorporating security into your connected system applications. WSE is primarily focused on bringing message-level security to distributed application development. The article, Why WSE?, describes such scenarios. Essentially WSE is about more flexible development of application architectures. If you look across the WS-* specifications you see a trend where functionality is being elevated from the transport protocol level (security, reliability, session management) to the message protocol level (WS-Security, WS-ReliableMessaging, WS-SecureConversation) and when combined with agreed specifications for data exchange (XML, XML Schema, SOAP, WSDL) and existing transport protocols (HTTP, TCP, UDP) this enables adaptable and extensible applications that also deliver on the goals on interoperability and integration.

ws支持http tcp smtp msmq的确没错!!无奈自己才疏学浅,以后继续努力!


@idior
thanks!
现已修正!
2006-07-20 21:20 | Ring      

#22楼    回复  引用    

也看眼界了。
文章介绍不错!
2006-07-20 22:04 | 初学者1 [未注册用户]

#23楼    回复  引用  查看    

wse3.0确实在ws上作了很多的扩展
等有空了,准备尝试翻译一文:通过wse上传大文件
2006-07-20 23:01 | main      

#24楼    回复  引用    

不是很明白楼主说的"BS,CS不能胜任“是什么意思。
在.NET Remoting的BinaryFormatter的条件下,应用于C/S模式是最好的选择。而在Xml Web Service,如楼上各位所提到的,采用的业界标准,利用SOAP协议,XML序列化,应用于B/S模式是不二选择。二都是二个不同的概念~~
2006-07-21 14:12 | 常建昭 [未注册用户]

#25楼 [楼主]   回复  引用  查看    

@常建昭
Remoting的出现是建立在原来比如RS232,Socket,RPC,DCOM这些技术基础之上的。 原来的技术比如用RS232技术进行通讯,需要定义每个字节的含义,而且通用性较差. Socket技术,数据的结构也需要自己定义.Remoting技术则较前几种技术先进. 这就像.NET的推出之与COM,COM+一样具有其先进性. 目前我是这样理解的!
2006-07-21 19:13 | Ring      

#26楼    回复  引用    

建议多用例子说明,没有比实例来的实际,期待一下篇。。。
2006-07-22 01:41 | Dong_ [未注册用户]

#27楼 [楼主]   回复  引用  查看    

@Dong_
后面有继续! 谢谢关注!
2006-07-22 18:49 | Ring      

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-03-14 10:11 编辑过

相关链接: