WCF(三)相关技术的学习
因为WCF包括了该服务模型提供了支持松散耦合和版本管理的序列化功能,并提供了与消息队列(MSMQ)、COM+、Asp.net Web服务、.NET Remoting等微软现有的分布式系统技术,下面我们来学习期相关的技术,以便更好的了解WCF的好处
MSMQ
MSMQ全称是Microsoft Message Queue——微软消息队列。它是一种异步传输模式,可以在不同的应用之间实现相互通信,相互通信的应用可以分布在同一台机器上,也可以分布于相连的网络空间中的任一位置。
MSMQ的实现原理是:消息的发送者把自己想要发送的信息放入一个容器,然后把它保存到一个系统公用空间的消息队列中,本地或异地的消息接收程序再从该队列中取出发给它的消息进行处理。
MSMQ中主要有两个概念:
1.一个是消息Message:Message是通信双方需要传递的消息,它可以是文本、图片、视频等。消息包含发送和接收者的标识,只有指定的用户才能取得消息。
2.一个是队列Queue:用来保存消息的存储空间,MSMQ中主要包括以下几种队列类型:
消息队列的优缺点
采用消息队列的好处是:由于是异步通信,无论是发送方还是接收方都不同等待对方返回成功消息,就可以执行余下的代码,大大提高了处理的能力;在信息传递过程中,具有故障恢复能力;MSMQ的消息传递机制使得通信的双方具有不同的物理平台成为可能。
消息队列缺点是:不适合Client需要Server端实时交互情况,大量请求时候,响应可能延迟。对于客户端,必须是Windows系统。可以通过连接器跟其他的非微软技术集成。
服务端代码
if (!MessageQueue.Exists(@".\Private$\LearningHardMSMQ")) { using (MessageQueue mq = MessageQueue.Create(@".\Private$\LearningHardMSMQ")) { mq.Label = "MyFirstPrivateQueue"; Console.WriteLine("已经创建消息队列"); Console.WriteLine("路径为:{0}", mq.Path); Console.WriteLine("私有队列名字为:{0}", mq.QueueName); mq.Send("MSMQ Private Message", "billy"); // 发送消息 } } if (MessageQueue.Exists(@".\Private$\LearningHardMSMQ")) { // 获得私有消息队列 MessageQueue mq = new MessageQueue(@".\Private$\LearningHardMSMQ"); mq.Send("Sending MSMQ private message" + DateTime.Now.ToLongDateString(), "Leaning Hard"); Console.WriteLine("Private Message is sent to {0}", mq.Path); } Console.Read();
客户端代码
if (MessageQueue.Exists(@".\Private$\LearningHardMSMQ")) { // 创建消息队列对象 using (MessageQueue mq = new MessageQueue(@".\Private$\LearningHardMSMQ")) { // 设置消息队列的格式化器 mq.Formatter = new XmlMessageFormatter(new string[] { "System.String" }); foreach (Message msg in mq.GetAllMessages()) { Console.WriteLine("Received Private Message is: {0}", msg.Body); } Message firstmsg = mq.Receive(); // 获得消息队列中第一条消息 Console.WriteLine("Received The first Private Message is: {0}", firstmsg.Body); } } Console.Read();
msmq的原理就是:一句话慨括就是服务器把消息放在一个公共的地方,这个地方叫做消息队列,而其他客户端可以从这个地方取出消息进行处理
.NET Remoting
NET Remoting简介
.NET REmoting与MSMQ不同,它不支持离线可得,另外只适合.NET平台的程序进行通信。它提供了一种允许对象通过应用程序域与另一个对象进行交互的框架。.NET 应用程序都在一个主应用程序域中执行的,在一个应用程序域中的代码不能访问另一个应用程序域的数据,然而在某些情况下,我们需要跨应用程序域,与另外的应用程序域进行通信,这时候就可以采用.NET Remoting技术来实现与另一个程序域中的对象进行交互。
NET Remoting基本原理
.NET Remoting技术是通过通道来实现两个应用程序之间对象的通信的
Web Services
Web Services是支持客户端与服务器通过网络互操作的一种软件系统,是一组可以通过网络调用的应用程序API
Web Services包含三个重要的组成部分SOAP/UDDI/WSDL
- SOAP协议:SOAP(Simple Object Access Protocol,简单对象访问协议)是在分散或分布式的环境中交换信息的简单协议,是一种基于XML的协议,需要绑定一个网络传输协议来完成信息的传输,这个协议通常是Http或Https,但也可以使其他协议。