当前位置: 首页 > news >正文

.NET 分布式技术比较

1. MSMQ(Microsoft Message Queue)

微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。

利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。

MSMQ与XML Web Services和.Net Remoting一样,是一种分布式开发技术。但是在使用XML Web Services或.Net Remoting组件时,Client端需要和Server端实时交换信息,Server需要保持联机。MSMQ则可以在Server离线的情况下工作,将Message临时保存在Client端的消息队列中,以后联机时再发送到Server端处理。

显然,MSMQ不适合于Client需要Server端及时响应的这种情况,MSMQ以异步的方式和Server端交互,不用担心等待Server端的长时间处理过程。

虽然XML Web Services和.Net Remoting都提供了[OneWay]属性来处理异步调用,用来解决Server端长方法调用长时间阻碍Client端。但是不能解决大量Client负载的问题,此时Server接受的请求快于处理请求。

扩展阅读:  http://www.cnblogs.com/sk-net/archive/2011/11/25/2232341.html

       http://www.codeproject.com/Articles/193611/DotNetMQ-A-Complete-Message-Queue-System-for-NET

扩展关键词: Message queue 消息中间件

思考: Message queue OR Web service

 

.NET Remoting

.Net Remoting技术,我们可以将其看作是一种分布式处理方式。作为应用程序之间通信的一种机制,.Net Remoting与MSMQ消息队列不同,它不支持离线脱机消息,另外只适合.Net平台间程序的通信.从微软的产品角度来看,可以说Remoting就是分布式组件DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。.NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信IPC(Internet Process Connection)机制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界(参考MSDN)。

 

.NET Remoting 与 Web Service 实现的原理并没有本质的区别

服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

     .net remoting与webservice都是用来通信的框架,它们最大的优点是可以像调用本地对象一样调用远程对象,比如:Uploader uploader = new Uploader();uploader.Save(file);可以用这样简洁而抽象的调用实现上传,不用自已对socket进行一系列的处理,可以把更多精力放在业务逻辑上;区别:1、webservice是用的应用层协议http封装的,所以它可以被很多其它语言调用,很多语言也都实现了webservice代理端封装以及工具,只要知道webservice的地址(比如:http://www.baidu.com/SomeService.asmx),就可以用,所以webservice的点特是好用、通用、效率一般;.net remoting是用传输层协议tcp封装的,所以可以以二进制传输数据,效率高;.net remoting基于.net的反射机制,只方便.net使用(其它语言反射机制实现不同,有的根本没有反射); 2、webservice能穿越防火墙,是因为http协议是现在广泛应用的协议,防火墙一般不会作屏蔽,并不说webservice有某功能穿越防火墙; 3、 只能在winform下用吗?如果你是用.net开发,任何类型的应用程序都可以使用.net remoting与webservice,包括winform,asp.net, wpf, silverlight...,只要能using ...就可以按它们的方式用了1).net Remoting的工作原理是什么?

答案:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

2)  使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?

答案:Web服务使用的消息机制,而Remoting采用的RPC. Web Service能用于不同平台,不同语言,Remoting只适用于.Net。效率上Remoting高于Xml Web Service

        Web服务是以消息来通信的,消息在调用方和服务端之间传递,而.NET Remoting是基于对象的,使得对象的方法可以跨网络调用

3)简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。

答案:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

4).概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。

答案:远程逻辑调用,remoing接口只能用在.net

remoting是.net 中用来跨越machine, process, appdomain 进行方法调用的技术,对于三成结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM

Web Service是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型。

相关推荐: http://www.cnblogs.com/DebugLZQ/archive/2012/07/30/2614815.html

               https://msdn.microsoft.com/en-us/library/ms978420.aspx

 

Serialization and Metadata

All distributed communication plumbing ultimately does two things: it marshals instances of programmatic data types into messages that can be sent across the network, and it provides a description of what those messages look like. The former is accomplished using some form of serialization engine, or marshaler. The latter is achieved through some form of metadata. For instance, for most (latter day) DCOM interfaces, the serialization engine was the Type Library Marshaler and type libraries provided the metadata. The key difference between ASP.NET Web services and .NET Remoting is in how they serialize data into messages and the format they choose for metadata.

转载于:https://www.cnblogs.com/allenhanblog/p/4446401.html

相关文章:

  • silverlight调用exe程序
  • JS 获取页面html信息
  • 悟系统规则
  • solr自动提示 - jquery ui autocomplete
  • SQL SERVER中查找某个字段位于哪些表
  • cdoj 847 方老师与栈 火车进出战问题
  • OpenGL绘制简单的时钟(首发测试)
  • VMware workstation 6.5安装Red Hat Linux 9
  • great C++ socket library
  • Android手机分辨率基础知识(DPI,DIP计算)
  • WebApi2官网学习记录---单元测试
  • redhat9 内核由2.4.20-8至2.6.10全过程
  • stdarg.h详解
  • C# 6.0 的那些事
  • C#脚本实践(一)
  • Hibernate【inverse和cascade属性】知识要点
  • java取消线程实例
  • jquery ajax学习笔记
  • JS字符串转数字方法总结
  • Map集合、散列表、红黑树介绍
  • MySQL的数据类型
  • Python进阶细节
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 线上 python http server profile 实践
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $.ajax,axios,fetch三种ajax请求的区别
  • (4)(4.6) Triducer
  • (LeetCode 49)Anagrams
  • (八)c52学习之旅-中断实验
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)Sublime Text3配置Lua运行环境
  • (转)四层和七层负载均衡的区别
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET 使用配置文件
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net6使用Sejil可视化日志
  • .Net中wcf服务生成及调用
  • @property python知乎_Python3基础之:property
  • [ NOI 2001 ] 食物链
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [CodeForces-759D]Bacterial Melee
  • [Flex] PopUpButton系列 —— 控制弹出菜单的透明度、可用、可选择状态
  • [Google Guava] 1.1-使用和避免null
  • [hdu 4405] Aeroplane chess [概率DP 期望]
  • [hive]中的字段的数据类型有哪些
  • [k8s系列]:kubernetes·概念入门