现在的位置: 首页 > 综合 > 正文

webservice与remoting

2013年10月09日 ⁄ 综合 ⁄ 共 3131字 ⁄ 字号 评论关闭
从体系结构上说webservice有5个层次
  1. Http传输信道
  2. XML的数据格式
  3. SOAP封装格式
  4. WSDL的描述方式
  5. UDDI

 从传输方式上:Web  Service和remoting传输协议不一样  。 Web  Service是http方式,可以穿透防火墙  。
remoting是通过socket方式传输数据 。

从运行原理上
  1.web service.首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class)
这个代理类负责与WebService服务器进行Request 和Response .当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作

  2..net remoting .net Remoting 是在DCOM等基础上发展起来的一种技术,它的主要目的是实现跨平台、跨语言、穿透企业防火墙,这也是他的基本特点,与WebService有所不同的是,它支持HTTP以及TCP信道,而且它不仅能传输XML格式的SOAP包,也可以传输传统意义上的二进制流,这使得它变得效率更高也更加灵活。而且它不依赖于IIS,用户可以自己开发(Development)并部署(Dispose)自己喜欢的宿主服务器,所以从这些方面上来讲WebService其实上是.net Remoting的一种特例.

从两者的特点看:
WebService的特点是:
平台独立性(Platform-independent)、跨语言(只要能支持XML的语言都可以) 以及穿透企业防火墙 但是它的缺点也很明显,就是需要部署一台Web Server;而且速度比较慢; 

.net Remoting的特点是:
他的优点是用户既可以使用TCP信道方式进行二进制流方式通信,也可以使用HTTP信道进行SOAP格式的性通信
效率相对WebService要高不少;但是它的缺点也很明显,.net remoting只能应用于MS 的.net framework之下。
从性能上来讲Remoting的效率和传统的DCOM、COM+的性能很相近!

   Remoting的优缺点
优点:
1、能让我们进行分布式开发
2、Tcp通道的Remoting速度非常快
3、虽然是远程的,但是非常接近于本地调用对象
4、可以做到保持对象的状态
5、没有应用程序限制,可以是控制台,winform,iis,windows服务承载远程对象
缺点:
1、非标准的应用因此有平台限制
2、脱离iis的话需要有自己的安全机制。

Remoting功能详解
  Remoting的两大功能在于:
  1)不同进程间的通信。
  2)不同应用域(AppDomain),不同进程的对象之间的通信(可以使用多种通信协议)。
  通常用到的Remoting的概念有:
  Remoting Channel:这是指客户端和服务器端的通信协议,如我们可以使用TCP, HTTP协议。
  Serializer:这是指在传输时采用何种格式来传输数据,如我们可以采用Binary,也可以采用SOAP来传输XML格式的数据.
    .NET力图简化这些概念的编程,所以上面所述的协议和格式都可以通过更改配置文件切换。这也是编程人员不用担心的问题。如一段典型的客户端配置文件的内容是:
<CONFIGURATION>
<SYSTEM.RUNTIME.REMOTING>
 <APPLICATION>
<CHANNELS>
<CHANNEL ref="http" clientConnectionLimit="200">
 <CLIENTPROVIDERS>
<FORMATTER ref="binary">
 </CLIENTPROVIDERS>
</CHANNEL>
</CHANNELS>
</APPLICATION>
</SYSTEM.RUNTIME.REMOTING>
</CONFIGURATION>
另如:
配置文件举例—服务端
<configuration>
 <system.runtime.remoting>
  <application>
   <service>
   <wellknown mode="Singleton" objectUri="SayHello"
    type="RemotingSamples.HelloServer, General" />
   </service>
   <channels>
    <channel port="8086" ref="http"/>
   </channels>
  </application>
 </system.runtime.remoting>
</configuration>
配置文件举例——客户端
<configuration>
 <system.runtime.remoting>
  <application>
   <client>
   <wellknown url="http://localhost:8086/SayHello"
   type="RemotingSamples.HelloServer, General" />
   </client >
   <channels>
    <channel port=“0" ref="http"/>
   </channels>
  </application>
 </system.runtime.remoting>
</configuration>

  关键术语
--远程对象:1.操作远程对象,对象运行在远程,客户端向他发送消息。MarshalByRefObject
2.传递远程对象,将远程的对象拿到本地,或者将本地对象发送过去。对副本进行操作[Serializable] 或ISerializable
--激活方式:1.服务器激活(WellKnown)Singleton SingleCall 2.客户端激活
----通道(Channels)1.一个远程对象使用通道发送和接收消息1.1服务器选择一个通道来监听请求(request)1.2客户端选择通道来和服务器通讯 2.Remoting提供了内置的通道2.1TCP通道和HTTP通道2.2也可以编写自己的通道
  开发步骤:(分三步)
1.创建远程对象2.创建一个应用程序作为“宿主(host)”,以接收客户请求 3.创建一个客户端调用远程对象
第一步:创建远程对象
继承System.MarshalByRefObject
 public class HelloServer : MarshalByRefObject
 {
  ……
 }
第二步:创建宿主应用程序
注册通道
内置通道:TCP,HTTP
注册服务器激活的远程对象
(WellKnown)
Singleton,SingleCall
URL
运行宿主程序
第三步:建立客户端程序
注册通道
内置通道:TCP,HTTP
根据URL得到对象代理
使用代理调用远程对象
  传递参数
1.传递简单类型 int,doulbe,string,enum……2.传递可序列化的类型 ArrayList,Hashtable,DataSet……
3.传递自定义类型 [Serializable]

最后,两者的一般的用处
一般如果你的产品在局域网里使用的话就用.net  remoting 
如果是提供远程访问的话就用web  service.
当然也不是绝对的,可以根据你的需要,来适当的选择用那个。

抱歉!评论已关闭.