如何成功发布一个MSMQ的Windows服务
因为MSMQ的使用需要不断的查看队列是否有新消息,所以一般是结合Windows的服务,当然也可以用一个不关闭的Winform程序,不过前者更好一些,不怕被人误关。
完成MSMQ的WindowsService项目后,将服务项目添加到Windows 服务中。
①如果访问的是一个已经存在的队列,那么启动的时候会报错误【本地计算机上的XXXX服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止】
这是因为没有分配权限。
处理方法:右击要访问的队列 ->安全
将Everyone和ANONYMOUS LOGON的完全控制分别勾选

②发送消息到远程队列
访问本地队列时,队列的路径格式及使用是这样子的
var mqPath = @".\Private$\MyMQ";
MessageQueue _MQ;
if (MessageQueue.Exists(mqPath))
{
_MQ = new MessageQueue(mqPath);
}
else
{
_MQ = MessageQueue.Create(mqPath);
}
访问远程队列时,代码略有不同:
1.远程队列的路径格式:string path = @"Formatname:DIRECT=tcp:192.168.1.11\Private$\myMQ"; 关键字不区分大小写
2.MSMQ 判断队列是否存在的方法(MessageQueue.Exists(string path))和创建队列(MessageQueue.Create(string path)),都是不支持远程队列的。
1.使用Exists方法会出现错误【无法确定具有指定格式名的队列是否存在。】
2.使用Create方法会出现错误【无法创建路径为 FormatName:DIRECT=tcp:192.168.1.11\Private$\myMQ 的队列】
3.由于前两条的限制,如果要访问远程专用队列,则必须保证事先在远程机器上该队列是存在的。
var path = @"FormatName:DIRECT=tcp:192.168.1.11\Private$\myMQ";
MessageQueue mq = new MessageQueue(queuePath);
4.当发送消息到远程队列时,系统会在本机的传出队列下创建一个临时队列,每发送一条消息,该消息都会先存在临时队列中,这样做的目的是防止因远程队列无法访问而丢失消息。
不过要特别注意的是,如果远程机器不能成功连接,则消息就一直在临时队列中存放;如果能成功连接,即使要访问的队列并不存在,消息发送程序也不会报错,并且临时队列中的消息会删除。
所以 一定要保证先在远程服务器上建好队列。传出队列具体信息如下图:


5.如果事务型属性不匹配,消息将无法传递。系统不会返回任何错误,但该条消息却会丢掉。
如何成功发布一个MSMQ的Windows服务的更多相关文章
- 如何创建一个标准的Windows服务
出处:http://www.cnblogs.com/wuhuacong/archive/2009/02/11/1381428.html 如何创建一个标准的Windows服务 在很多时候,我们需要一个定 ...
- 从零开始发布一个ArcGIS Server地图服务
@ 目录 一.软件环境搭建 1.数据库安装 1.1.Oracle(可选) 1.1.1.安装Oracle服务端 1.1.2.安装Oracle客户端 1.2.PostgreSQL(可选) 1.2.1.安装 ...
- Java Service Wrapper 发布Java程序为Windows服务
下载Windows版本:https://www.krenger.ch/blog/java-service-wrapper-3-5-37-for-windows-x64/ 转自:F:\java\bhGe ...
- 创建一个简单的windows服务,每间隔一定时间重复执行批处理文件
创建一个windows服务项目,增加App.config <?xml version="1.0" encoding="utf-8" ?> <c ...
- 【转】如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件
问题描述: 用VS2013写好一个程序,在本机上运行一切正常.但是如果直接把exe文件放到另一台机器上用,则会出现: Windows XP:不是一个正常的win32程序 Window 7:缺少msvc ...
- 写一个Python的windows服务
1. 安装pywin32和pyinstaller pip install pywin32 pip install pyinstaller 2.写一个服务Demo # -*- coding: utf-8 ...
- RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用
RDIFramework.NET框架SOA解决方案(集Windows服务.WinForm形式与IIS形式发布)-分布式应用 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架 ...
- NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用
NET框架SOA解决方案(集Windows服务.WinForm形式与IIS形式发布)-分布式应用 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.N ...
- C#创建windows服务并发布
创建window 服务 新建一个window 服务项目MyService,如下图 切换到代码视图修改. using System; using System.Collections.Generic; ...
随机推荐
- 当我们安装使用时,会出现eclipse启动不了,出现“Java was started but returned exit code=13......”的问题
安装win8.1后,启动eclipse,也会提示 "java was started but returned exit code=13" 可能是eclipse.ini配置文件错误 ...
- ASP.NET运行时详解 集成模式和经典模式
遗留问题 在<ASP.NET运行时详解 生命周期入口分析>中遗留两个问题,包括Application的InitInternal方法执行细节.IIS6和II7经典模式请求管道管理类Appli ...
- Jquery对象,DOM对象
jquery对象就是通过Jquery包装Dom对象后产生的对象,Dom对象想要通过jquery进行操作,先转换为jquery对象: dom对象转化为jquery对象,使用$(dom对象): jquer ...
- 关于Chrome Dev Tool
★注意点一:函数名,方法名要拼写准确;
- 转帖一篇sixxpack破解的文章!
星期天闲着没事玩游戏,玩游戏不能无外挂.于是百度了半天,找到了一个,看介绍貌似不错,就下载了下来.一看,竟然是用.net写的,下意识地Reflector了一下.发现竟是一个叫actmp的程序集.如图: ...
- Opserver监控工具的使用
Opserver监控工具的使用 Opserver是Stack Overflow的开源监控解决方案,由Stack Exchange发布,基于.NET框架构建.开源地址:https://github.co ...
- eclipse中改变默认的workspace的方法及说明
eclipse中改变默然的workspace的方法可以有: 1.在创建project的时候,手动选择使用新的workspace,如创建一个web project,在向导中的Location选项,取消使 ...
- AxWebBrowser与WebBrowserU盾登陆时的使用
PS:上个月为财务小妹做了个自动上传报表的工具,财务妹子表示调戏我很开心T_T~~. 由于该小程序涉及到登陆,准备用WebBroswer,这一下撞墙上了,无法展示U盾密码框. 我在博问上的问题 ...
- Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll引用,导致项目无法调试问题
最近在做录音功能,用到了Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll两个dll,但是引入后,无法调试项目 具体解决方法: 修改app. ...
- 技巧题---Single boy
Description Today is Christmas day. There are n single boys standing in a line. They are numbered fo ...