如何成功发布一个MSMQ的Windows服务

因为MSMQ的使用需要不断的查看队列是否有新消息,所以一般是结合Windows的服务,当然也可以用一个不关闭的Winform程序,不过前者更好一些,不怕被人误关。

完成MSMQ的WindowsService项目后,将服务项目添加到Windows 服务中。

①如果访问的是一个已经存在的队列,那么启动的时候会报错误【本地计算机上的XXXX服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止】

这是因为没有分配权限。

处理方法:右击要访问的队列 ->安全

EveryoneANONYMOUS 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拒绝访问错误

时间: 2024-12-13 05:19:27

如何成功发布一个MSMQ的Windows服务的相关文章

Java Service Wrapper 发布Java程序为Windows服务

下载Windows版本:http://nchc.dl.sourceforge.net/sourceforge/wrapper/wrapper-windows-x86-32-3.2.3.zip 现在目前只要32位有免费的,64位免费版目前还没有做出来.官网上(社区)那一列是免费的. 1.先把你的项目用MANIFEST.MF打成jar包,例如bb.jar.新建目录,例如:dist,放在D盘下面.把bb.jar放到dist目录下. 2.在dist目录下新建conf,lib,log三个文件夹.conf是

【转】如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件

问题描述: 用VS2013写好一个程序,在本机上运行一切正常.但是如果直接把exe文件放到另一台机器上用,则会出现: Windows XP:不是一个正常的win32程序 Window 7:缺少msvcp120.dll 能否有一种方法,把程序运行所需要的环境一并打包,使之可以在任何Windows计算机上使用? 为了方便说明,我们新建一个简单的控制台应用项目,直接如图: 非常简单,一个使用了C++标准库的控制台应用程序,在装有开发环境的本机顺序执行出如下效果: 真实一个旷世奇作,我们迫不及待地就此发

写一个Python的windows服务

1. 安装pywin32和pyinstaller pip install pywin32 pip install pyinstaller 2.写一个服务Demo # -*- coding: utf-8 -*- import sys import time import win32api import win32event import win32service import win32serviceutil import servicemanager import logging import

RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

RDIFramework.NET框架SOA解决方案(集Windows服务.WinForm形式与IIS形式发布)-分布式应用 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为指导思想,作为异质系统整合与互操作性.分布式应用提供了可行的解决方案. 1.SOA平台简介 1.1.概述 SOA(service-oriented architecture,也叫面向服务的体系结构或面向服务架构)是指为了解决在Inte

创建第一个windows服务

windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志. 计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行. 可以通过选择菜单"开始"-〉"控制面板"-〉"管理工具"-〉"服务"来查看现有系统中的服务,如下图: 创建一个windows服务 切换到代码视图修改. using System; using

C#创建windows服务并发布

创建window 服务 新建一个window 服务项目MyService,如下图 切换到代码视图修改. [csharp] view plaincopy using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.Ser

.NET Core Generic Host Windows服务部署使用Topshelf

此文源于前公司在迁移项目到.NET Core的过程中,希望使用Generic Host来管理定时任务程序时,没法部署到Windows服务的问题,而且官方也没给出解决方案,只能关注一下官方issue #809 等他们方解决了. 官方文档只提供了一个<在 Windows 服务中托管 ASP.NET Core>的方案,可以使用Microsoft.AspNetCore.Hosting.WindowsServices类库来把Web应用部署为Windows服务.但是ASP.NET Core虽然是控制台程序

把tomcat服务器配置为windows服务的方法

http://ykyfendou.iteye.com/blog/2032916 使用tomcat开发的项目,我们把项目交付给客户的时候,客户都不希望在每次开机的时候都要启动一下tomcat服务器,而希望他可以随系统启动.或者把他配置为windows的服务,随服务的启动而启动.但是绿色解压版的tomcat是不会直接在windows服务中出现的.需要我们进行配置才可以. 配置方法: 一.添加到windows服务中: 1.首先.在设置tomcat开机自动启动之前首先需要配置java的环境变量以及tom

WCF服务寄宿IIS与Windows服务

WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行需要一个宿主ServiceHost,我们可以选用控制台应用程序,也可以选择IIS寄宿,还可以选择windows 服务寄宿.相较与控制台程序,IIS,和Windows服务比较稳定.而且大家不会时不时的去重启下IIS下的网站,或者windows服务. 在IIS下寄宿Wcf 我们新建一个类库项目 在项目下