博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF消息队列
阅读量:6257 次
发布时间:2019-06-22

本文共 2869 字,大约阅读时间需要 9 分钟。

这里主要讲解WCF结合Microsoft Messaging Queue(MSMQ)实现的消息队列,本实例属于测试用例,与实际项目编码相差甚远,所以暂不能用于实际项目中.希望以后慢慢完善.

在一些业务场景中,如果服务端与消费段发生了网络问题或者是需要批量提交数据,那么使用消息队列再合适不过了,比如商城订单系统等等.

MSMQ的配置

在开始之前,需要确定机器本身已经安装了MSMQ服务,具体的安装方法如下:

  1. 控制面板->添加删除程序->添加删除组件->选择Message Queue,点击添加
  2. 添加完毕后,可以通过我的电脑->管理来查看是否安装成功
  3. 检查Service.msc中的Message Queuing服务是否启动,没有启动的话,启动它.
  4. 由于测试的服务端和客户端都在一台机器上,所以我们需要用到Private queue,请右击我的电脑->管理->服务程序->Message Queuing->在Private Queues下面创建requestqueue和responsequeue.
  5. 创建完成后,在requestqueue上右击属性,然后在弹出的标签中选中”Security”标签,为当前用户附上所有权限.

操作完成上面步骤以后,MSMQ这一块基本上完成,接下来开始配置WCF部分.

WCF的配置

首先创建一个Console Application程序,然后引用 System.ServiceModel程序集,然后编写如下Service:

using System;using System.ServiceModel;namespace MSMQWCFDaemon{    public class Service:iService    {        public void Operation()        {            Console.WriteLine("Hello MessageQueue");        }    }     [ServiceContract]    public interface iService    {        [OperationContract(IsOneWay = true)]        void Operation();    }}

 

代码很简单,就是在服务端简单的打印出 Hello MessageQueue字样.

这一步做完后,我们需要编写代码来启动服务,在启动服务前,我们需要配置App.config文件,这里我不进行手动配置,而是采用WCF Service Configuration Editor来配置.

在VS中,单击 Tools -> WCF Service Configuration Editor,打开编辑器,具体的编辑方法,请参见我以前的文章<<>>,下面列出配置不一样的地方:

首先,配置得选择MSMQ方式:

 

其次,选择让WCF Client进行连接

 

然后,配置连接字串为: net.msmq://localhost/private/requestqueue

 

最后,需要设置exactlyOnce="false",用来打开Transaction功能.

 

 设置完成后,将生成的App.config文件保存到MSMQWCFDaemon项目下,然后编写如下代码以便启动Service:

using System;using System.ServiceModel;using System.ServiceModel.Description;namespace MSMQWCFDaemon{    class Program    {        static void Main(string[] args)        {            using (ServiceHost host = new ServiceHost(typeof(Service)))            {                ServiceMetadataBehavior smb = host.Description.Behaviors.Find
(); if (smb == null) host.Description.Behaviors.Add(new ServiceMetadataBehavior()); //expose metadata to let SvcUntil.exe generate the config file and proxy class host.AddServiceEndpoint(typeof(IMetadataExchange),MetadataExchangeBindings.CreateMexHttpBinding(),"mex"); host.Open(); Console.WriteLine("Service listen begin to listen..."); Console.WriteLine("press any key to teriminate..."); Console.ReadKey(); host.Abort(); host.Close(); } } }}

好了,F5一下,我们看到服务端启动了.

然后需要做的是编写客户端代码,我们首先需要利用SvcUntil.exe工具生成客户端配置文件和代理类,这个请参见之前的文章: <<>>,生成完成后拷贝到Client项目中,然后编写如下代码调用服务端函数:

using System;namespace MSMQWCFClient{    class Program    {        static void Main(string[] args)        {            iServiceClient client = new iServiceClient();            client.Operation();            Console.ReadKey();        }    }}

测试结果

下面就来测试我们做好的消息队列:

首先,开启服务端,然后开启客户端,我们看到服务端成功接收了数据,MSMQ队列中无记录:

 

然后把服务端停止,连续启动三次客户端,可以看到如下记录:

 

然后打开服务端,看到三条存在于MSMQ的记录都被推送了出去:

 

希望对你有用

源码下载

 

转载地址:http://xxjsa.baihongyu.com/

你可能感兴趣的文章
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
如何花更少的时间学习更多的知识
查看>>
学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2
查看>>
升级fedora 18到fedora 19
查看>>
【代码小记】无
查看>>
BarTender 2016表单中的“秤显示”控件
查看>>
11月20日学习内容整理:jquery插件
查看>>
Arduino入门之前
查看>>
Redis客户端集群
查看>>
javascript基础篇:函数
查看>>
SVN与TortoiseSVN实战:补丁详解
查看>>
java一些面试题
查看>>
干货型up主
查看>>
获取页面中所有dropdownlist类型控件
查看>>
读《淘宝数据魔方技术架构解析》有感
查看>>
[转载]如何破解Excel VBA密码
查看>>
手机web——自适应网页设计(html/css控制) - 51CTO.COM
查看>>
【BZOJ】2563: 阿狸和桃子的游戏
查看>>
redis 中文字符显示
查看>>
国内外MD5在线解密网站
查看>>