在msmq3.0中使用http协议发送消息

http://www.cnblogs.com/yjmyzz/articles/1144777.html

1.先声明:
msmq3.0仅在winxp和win2003以上系统支持,如果windows vista系统,据说已经开始支持msmq4.0了

2.为什么要使用http协议发送消息 
访问internet远程发送消息时,msmq2.0以上就已经开始支持tcp方式了,但是如果外网的服务器与发送端之间有防火墙或其它网络设备隔离,或者服务器上的tcp所需要的端口未开放,tcp方式将无法发送,而http协议使用的是默认的80端口,一般服务器都会开放这一端口,另外只有http协议可以穿透防火墙

3.msmq3.0的安装问题
在windows xp上安装消息队列时,默认情况下msmq已经安装了http协议支持,而windows2003上,默认安装的消息队列是没有http支持的,需要在"添加/删除 windows组件"-->"应用程序服务器"-->"消息队列"-->"详细信息"中把"MSMQ http支持"勾中

另外要说明的是msmq3.0在安装过程中,需要在iis的默认站点(即标识为W3WVC1,msmq在安装中定死了这一标识)中创建msmq的虚拟目录,如果你不幸把iis的默认站点删除了,就无法正确安装msmq3.0的http支持(既使你再新建一个默认站点也没用,因为新建的站点,其内部元数据标识是随机生成的,不是W3WVC1),会提供以下错误:  /LM/W3Svc/1/Root/MSMQ 找不到之类

解决办法:
(a)把iis卸载掉,重新安装iis,当然重安装iis后,很多iis的站点信息也将丢失 
(b)修改iis元数据
先到http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-ade629c89499&DisplayLang=en 这里下载一个Internet Information Services (IIS) 6.0 Resource Kit Tools 安装后运行

程序-->IIS Resources--> Metabase Explorer --> Metabase Explorer

展开/LM/W3SVC/节点,找到你当前的默认站点标识名(技巧:在iis管理中,右击默认站点-->属性-->网站-->属性-->在弹出对话框最下面的日志文件名W3SVC1529656452\exyymmdd.log,这里的1529656452就是内部标识)

修改以下几个地方:
先把这个标识rename为1,再修改这个节点下面的root以及虚拟目录的AppRoot,即把类似/LM/W3SVC/1529656452/Root 修改为/LM/W3SVC/1/Root

保存,然后重启iis服务,就能正常安装msmq3.0的http支持了(这个技巧我搜索遍了google,baidu也没找到,最终自己尝试发现的!)

4.发送代码示例:
代码其实很简单

MessageQueue mq  =   new  MessageQueue( " FormatName:DIRECT=http://172.134.54.4/msmq/Private$/demo " );
System.Messaging.Message msg 
=   new  System.Messaging.Message();
msg.Body 
=   " Hello World! "   +  DateTime.Now.ToString();
msg.Formatter 
=   new  System.Messaging.XmlMessageFormatter( new  Type[]  typeof(string) } );
mq.Send(msg); 

 

如果172.134.54.4这台服务器是直接对外公开访问的,以上代码就可以将消息正常发送到该服务器的专用队列demo上

5.如何穿透防火墙,路由等障碍
微软有一篇专门文章讲解这个,主要是设置服务器端的C:\WINDOWS\system32\msmq\mapping\sample_map.xml这个文件,详情可参见: 
http://www.microsoft.com/china/windowsserver2003/techinfo/overview/msmqb2b.mspx

最后特别感谢我的网友yongfeng,在调试过程中是他给我很多帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值