webservice与remoting

从体系结构上说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. 当然也不是绝对的,可以根据你的需要,来适当的选择用那个。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值