惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - billqi(岁月如水)

解除webservice上下传文件大小限制 [转贴]请不要做浮躁的人! BBS 水木清华站 msmq消息队列使用及测试总结 PDA 应用领域 GPS的十大绝技 GSM - billqi(岁月如水) - 博客园 深圳面试提醒(特别针对女生) CRM功能架构 VMI的理念与应用 台湾供货商管理库存(VMI)导入指引 SMART原则与自我激励 msmq 之触发器 微软架构师网站 - billqi(岁月如水) 绩效考核的KPI及SMART原则 微软.net framework工具集帮助 sql查询语句问题- sum求和的值作为查询条件 2年前的建议书 Server群集部署? 新的天地
msmq两个网域之间消息传输与接收测试总结
billqi(岁月如水) · 2005-12-29 · via 博客园 - billqi(岁月如水)

近一段时间我负责的一个项目,在做数据传递时,选择了msmq的作为传输平台,由于网络环境和应用系统平台的复杂性,针对msmq的解决方案,我做了大量的测试,也遇到了很多的问题,其中有面对不同windows操作系统时的,也有面对不同的网络环境的(网通、电信、铁通等等),也有和传输报文的内容及大小相关的,也有和msmq server的安全和权限设定相关的,由于ms的mq是免费产品,所以能得到的技术支持有限,不得不自己边摸索边总结,其中的苦闷可想而知。为了让以后使用msmq的朋友少走些弯路,我把自己的一些碰到的一些问题和解决方法公布出来,供大家参考,由于时间有限,该文在后面慢慢完善。
问题描述:

  1,应用场景:2台域控制器window2003 Server AB之间用msmq3.0做消息传递.2server都打了最新的补丁包,

     msmq安全属性给everyone群组最高权限,域控制安全策略网络访问设定让everynone权限应用于匿名用户。

              AMSMQ Server的服务器,A服务器上建有公共队列A001;

              Bmsmq的客户端,部署有发送和接收应用程序。

  2,应用过程

              B发送应用程序向A上的消息队列A001发送消息,在A的消息队列A001中看到从B发送来的消息,表明消息发送成功;

       B接收应用程远程读取A上消息队列A001中的消息,出现异常。

  3,应用程序代码

        //消息发送

 try

 {

 System.Messaging.MessageQueue Queue;

 Queue = new System.Messaging.MessageQueue(@"FormatName:DIRECT=TCP:172.26.230.2\ptest1");

 System.Messaging.Message Msg;

 Msg = new System.Messaging.Message();

 Msg.Formatter =new System.Messaging.BinaryMessageFormatter();

 Msg.Body="Testing 3 times";

 Queue.Send(Msg);

 }

 catch(Exception ex)

 {

  System.Windows.Forms.MessageBox.Show(ex.ToString());

 }

 //消息接收

 try

 {

  System.Messaging.MessageQueue mq = new System.Messaging.MessageQueue(@"FormatName:DIRECT=tcp:172.26.230.2\ptest1");

 // Set the queue'ss formatter to decode Point objects

 mq.Formatter = new System.Messaging.BinaryMessageFormatter();

 System.Messaging.Trustee trustee=new System.Messaging.Trustee();

 System.Messaging.Message msg = mq.Peek ( new TimeSpan(10000)) ;

 // Convert received message to object that we think was sent

 string pt = (string) msg.Body ;

 // Display it to the user

 MessageBox.Show (pt) ;

 }

 catch(Exception ex)

 {

  MessageBox.Show(ex.ToString());

 }

4,接收消息的异常

   /*

 ---------------------------

 System.Messaging.MessageQueueException

 at System.Messaging.MQCacheableInfo.get_ReadHandle()

 at System.Messaging.MessageQueue.StaleSafeReceiveMessage(UInt32 timeout, Int32 action, MQPROPS properties, NativeOverlapped* overlapped, ReceiveCallback receiveCallback, IntPtr cursorHandle, IntPtr transaction)

 at System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan timeout, Int32 action, IntPtr cursor, MessagePropertyFilter filter, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)

 at System.Messaging.MessageQueue.Peek(TimeSpan timeout)

 at InternetQueueingRecipient.Form1.button2_Click(Object sender, EventArgs e) in c:\msmqandnet\msmqandnet\internetqueuing\internetqueueingrecipient\form1.cs:line 294

    */

5,问题

     我在做测试的过程中,如果B为独立服务器(没有装AD,其操作系统为window2003,window xp,window2000接收消息都没有问题,但是在域

控制器作为客户端接收消息的服务器时就出现了如上问题,原因是什么?如何解决这个问题?在域控制器中msmq默认的远程读取帐户是什么?


6,总结
 

1.       MQ不能用HTTP方式接收(只能用HTTP方式发送)

2.       在不同网域接收MQ时,必须打开everynoneguest账号(可以试试)。

3.       建议不要用client去接收MQ讯息,这样会存在很多安全隐患,而且讯息接收不稳定。

MQ SERVER 有可能会“瀑满”,也就是说,如果讯息来不及“取走”的话,会丢失。

7,向微软确认后,微软的回复

Here are eleven programming guidelines for Writing Better MSMQ Applications You should follow them when writing an MSMQ application.

  • Do only local receives.
  • Avoid functions that query the Message Queue Information Store (MQIS).
  • Implement timeouts.
  • Understand the limits of asynchronous notification.
  • Know when and where to use transactions.
  • Know when to use persistable COM objects.
  • Understand what security context to use.
  • Implement smart queue usage.
  • Request acknowledgements or nonacknowledgements.
  • Remember case sensitivity.
  • Test your application with a full reboot while offline.