解决msmq接收远程主机私有队列消息之问题!

透过调用windows\system32\mqoa.dll 这个Message Queuing ActiveX
Interface API函数就可就;

脚是一个简练的事例供参考;
 

图片 1图片 2
  1图片 3using System;
  2图片 4using System.Drawing;
  3图片 5using System.Collections;
  4图片 6using System.ComponentModel;
  5图片 7using System.Windows.Forms;
  6图片 8using MSMQ;
  7图片 9namespace MyTest
  8图片 10图片 11图片 12{
  9图片 13图片 14    /**//// <summary>
 10图片 15    /// Form2 的摘要说明。
 11图片 16    /// </summary>
 12图片 17    public class Form2 : System.Windows.Forms.Form
 13图片 18图片 19    图片 20{
 14图片 21图片 22        Forms#region Forms
 15图片 23        private System.Windows.Forms.GroupBox groupBox1;
 16图片 24        private System.Windows.Forms.Label label1;
 17图片 25        private System.Windows.Forms.Label label2;
 18图片 26        private System.Windows.Forms.Label label3;
 19图片 27        private System.Windows.Forms.GroupBox groupBox2;
 20图片 28        private System.Windows.Forms.TextBox txthost;
 21图片 29        private System.Windows.Forms.TextBox txtpath;
 22图片 30        private System.Windows.Forms.RadioButton trans1;
 23图片 31        private System.Windows.Forms.RadioButton trans2;
 24图片 32        private System.Windows.Forms.GroupBox groupBox3;
 25图片 33        private System.Windows.Forms.Label label4;
 26图片 34        private System.Windows.Forms.Button button1;
 27图片 35        private System.Windows.Forms.Label label5;
 28图片 36        private System.Windows.Forms.Button button2;
 29图片 37        private System.Windows.Forms.TextBox txtmsg;
 30图片 38        private System.Windows.Forms.TextBox txtrece;
 31图片 39图片 40        /**//// <summary>
 32图片 41        /// 必需的设计器变量。
 33图片 42        /// </summary>
 34图片 43        private System.ComponentModel.Container components = null;
 35图片 44
 36图片 45        public Form2()
 37图片 46图片 47        图片 48{
 38图片 49            //
 39图片 50            // Windows 窗体设计器支持所必要的
 40图片 51            //
 41图片 52            InitializeComponent();
 42图片 53
 43图片 54            //
 44图片 55            // TODO: 在 InitializeComponent 调用后补偿加任何构造函数代码
 45图片 56            //
 46图片 57        }
 47图片 58
 48图片 59图片 60        /**//// <summary>
 49图片 61        /// 清理所有方下的资源。
 50图片 62        /// </summary>
 51图片 63        protected override void Dispose( bool disposing )
 52图片 64图片 65        图片 66{
 53图片 67            if( disposing )
 54图片 68图片 69            图片 70{
 55图片 71                if(components != null)
 56图片 72图片 73                图片 74{
 57图片 75                    components.Dispose();
 58图片 76                }
 59图片 77            }
 60图片 78            base.Dispose( disposing );
 61图片 79        }
 62图片 80        #endregion 
 63图片 81
 64图片 82图片 83        Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
 65图片 84图片 85        /**//// <summary>
 66图片 86        /// 设计器支持所用的点子 – 不要用代码编辑器修改
 67图片 87        /// 此方式的始末。
 68图片 88        /// </summary>
 69图片 89        private void InitializeComponent()
 70图片 90图片 91        图片 92{
 71图片 93            this.groupBox1 = new System.Windows.Forms.GroupBox();
 72图片 94            this.groupBox2 = new System.Windows.Forms.GroupBox();
 73图片 95            this.trans2 = new System.Windows.Forms.RadioButton();
 74图片 96            this.trans1 = new System.Windows.Forms.RadioButton();
 75图片 97            this.label3 = new System.Windows.Forms.Label();
 76图片 98            this.txtpath = new System.Windows.Forms.TextBox();
 77图片 99            this.label2 = new System.Windows.Forms.Label();
 78图片 100            this.txthost = new System.Windows.Forms.TextBox();
 79图片 101            this.label1 = new System.Windows.Forms.Label();
 80图片 102            this.groupBox3 = new System.Windows.Forms.GroupBox();
 81图片 103            this.button2 = new System.Windows.Forms.Button();
 82图片 104            this.txtrece = new System.Windows.Forms.TextBox();
 83图片 105            this.label5 = new System.Windows.Forms.Label();
 84图片 106            this.button1 = new System.Windows.Forms.Button();
 85图片 107            this.txtmsg = new System.Windows.Forms.TextBox();
 86图片 108            this.label4 = new System.Windows.Forms.Label();
 87图片 109            this.groupBox1.SuspendLayout();
 88图片 110            this.groupBox2.SuspendLayout();
 89图片 111            this.groupBox3.SuspendLayout();
 90图片 112            this.SuspendLayout();
 91图片 113            // 
 92图片 114            // groupBox1
 93图片 115            // 
 94图片 116            this.groupBox1.Controls.Add(this.groupBox2);
 95图片 117            this.groupBox1.Controls.Add(this.label3);
 96图片 118            this.groupBox1.Controls.Add(this.txtpath);
 97图片 119            this.groupBox1.Controls.Add(this.label2);
 98图片 120            this.groupBox1.Controls.Add(this.txthost);
 99图片 121            this.groupBox1.Controls.Add(this.label1);
100图片 122            this.groupBox1.Location = new System.Drawing.Point(8, 8);
101图片 123            this.groupBox1.Name = “groupBox1”;
102图片 124            this.groupBox1.Size = new System.Drawing.Size(352, 120);
103图片 125            this.groupBox1.TabIndex = 0;
104图片 126            this.groupBox1.TabStop = false;
105图片 127            this.groupBox1.Text = “MSMQ Configuration”;
106图片 128            // 
107图片 129            // groupBox2
108图片 130            // 
109图片 131            this.groupBox2.Controls.Add(this.trans2);
110图片 132            this.groupBox2.Controls.Add(this.trans1);
111图片 133            this.groupBox2.Location = new System.Drawing.Point(104, 72);
112图片 134            this.groupBox2.Name = “groupBox2”;
113图片 135            this.groupBox2.Size = new System.Drawing.Size(144, 40);
114图片 136            this.groupBox2.TabIndex = 5;
115图片 137            this.groupBox2.TabStop = false;
116图片 138            // 
117图片 139            // trans2
118图片 140            // 
119图片 141            this.trans2.Checked = true;
120图片 142            this.trans2.Location = new System.Drawing.Point(72, 16);
121图片 143            this.trans2.Name = “trans2”;
122图片 144            this.trans2.Size = new System.Drawing.Size(64, 19);
123图片 145            this.trans2.TabIndex = 1;
124图片 146            this.trans2.TabStop = true;
125图片 147            this.trans2.Text = “true”;
126图片 148            // 
127图片 149            // trans1
128图片 150            // 
129图片 151            this.trans1.Location = new System.Drawing.Point(8, 16);
130图片 152            this.trans1.Name = “trans1”;
131图片 153            this.trans1.Size = new System.Drawing.Size(48, 19);
132图片 154            this.trans1.TabIndex = 0;
133图片 155            this.trans1.Text = “true”;
134图片 156            // 
135图片 157            // label3
136图片 158            // 
137图片 159            this.label3.Location = new System.Drawing.Point(8, 88);
138图片 160            this.label3.Name = “label3”;
139图片 161            this.label3.Size = new System.Drawing.Size(88, 23);
140图片 162            this.label3.TabIndex = 4;
141图片 163            this.label3.Text = “Transactional”;
142图片 164            // 
143图片 165            // txtpath
144图片 166            // 
145图片 167            this.txtpath.Location = new System.Drawing.Point(72, 48);
146图片 168            this.txtpath.Name = “txtpath”;
147图片 169            this.txtpath.Size = new System.Drawing.Size(176, 21);
148图片 170            this.txtpath.TabIndex = 3;
149图片 171            this.txtpath.Text = “Private$\\test”;
150图片 172            // 
151图片 173            // label2
152图片 174            // 
153图片 175            this.label2.Location = new System.Drawing.Point(8, 48);
154图片 176            this.label2.Name = “label2”;
155图片 177            this.label2.Size = new System.Drawing.Size(48, 23);
156图片 178            this.label2.TabIndex = 2;
157图片 179            this.label2.Text = “Path”;
158图片 180            // 
159图片 181            // txthost
160图片 182            // 
161图片 183            this.txthost.Location = new System.Drawing.Point(72, 24);
162图片 184            this.txthost.Name = “txthost”;
163图片 185            this.txthost.Size = new System.Drawing.Size(176, 21);
164图片 186            this.txthost.TabIndex = 1;
165图片 187            this.txthost.Text = “127.0.0.1”;
166图片 188            // 
167图片 189            // label1
168图片 190            // 
169图片 191            this.label1.Location = new System.Drawing.Point(8, 24);
170图片 192            this.label1.Name = “label1”;
171图片 193            this.label1.Size = new System.Drawing.Size(48, 23);
172图片 194            this.label1.TabIndex = 0;
173图片 195            this.label1.Text = “Host”;
174图片 196            // 
175图片 197            // groupBox3
176图片 198            // 
177图片 199            this.groupBox3.Controls.Add(this.button2);
178图片 200            this.groupBox3.Controls.Add(this.txtrece);
179图片 201            this.groupBox3.Controls.Add(this.label5);
180图片 202            this.groupBox3.Controls.Add(this.button1);
181图片 203            this.groupBox3.Controls.Add(this.txtmsg);
182图片 204            this.groupBox3.Controls.Add(this.label4);
183图片 205            this.groupBox3.Location = new System.Drawing.Point(8, 136);
184图片 206            this.groupBox3.Name = “groupBox3”;
185图片 207            this.groupBox3.Size = new System.Drawing.Size(352, 176);
186图片 208            this.groupBox3.TabIndex = 1;
187图片 209            this.groupBox3.TabStop = false;
188图片 210            this.groupBox3.Text = “MSMQ Test”;
189图片 211            // 
190图片 212            // button2
191图片 213            // 
192图片 214            this.button2.Location = new System.Drawing.Point(280, 56);
193图片 215            this.button2.Name = “button2”;
194图片 216            this.button2.Size = new System.Drawing.Size(56, 23);
195图片 217            this.button2.TabIndex = 6;
196图片 218            this.button2.Text = “&Receive”;
197图片 219            this.button2.Click += new System.EventHandler(this.button2_Click);
198图片 220            // 
199图片 221            // txtrece
200图片 222            // 
201图片 223            this.txtrece.Location = new System.Drawing.Point(8, 78);
202图片 224            this.txtrece.Multiline = true;
203图片 225            this.txtrece.Name = “txtrece”;
204图片 226            this.txtrece.Size = new System.Drawing.Size(336, 90);
205图片 227            this.txtrece.TabIndex = 5;
206图片 228            this.txtrece.Text = “Hello World “;
207图片 229            // 
208图片 230            // label5
209图片 231            // 
210图片 232            this.label5.Location = new System.Drawing.Point(8, 56);
211图片 233            this.label5.Name = “label5”;
212图片 234            this.label5.Size = new System.Drawing.Size(112, 23);
213图片 235            this.label5.TabIndex = 4;
214图片 236            this.label5.Text = “Receive Message”;
215图片 237            // 
216图片 238            // button1
217图片 239            // 
218图片 240            this.button1.Location = new System.Drawing.Point(280, 24);
219图片 241            this.button1.Name = “button1”;
220图片 242            this.button1.Size = new System.Drawing.Size(56, 23);
221图片 243            this.button1.TabIndex = 3;
222图片 244            this.button1.Text = “&Send”;
223图片 245            this.button1.Click += new System.EventHandler(this.button1_Click);
224图片 246            // 
225图片 247            // txtmsg
226图片 248            // 
227图片 249            this.txtmsg.Location = new System.Drawing.Point(104, 24);
228图片 250            this.txtmsg.Name = “txtmsg”;
229图片 251            this.txtmsg.Size = new System.Drawing.Size(168, 21);
230图片 252            this.txtmsg.TabIndex = 2;
231图片 253            this.txtmsg.Text = “Hello World “;
232图片 254            // 
233图片 255            // label4
234图片 256            // 
235图片 257            this.label4.Location = new System.Drawing.Point(8, 24);
236图片 258            this.label4.Name = “label4”;
237图片 259            this.label4.Size = new System.Drawing.Size(96, 23);
238图片 260            this.label4.TabIndex = 0;
239图片 261            this.label4.Text = “Send Message”;
240图片 262            // 
241图片 263            // Form2
242图片 264            // 
243图片 265            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
244图片 266            this.ClientSize = new System.Drawing.Size(368, 318);
245图片 267            this.Controls.Add(this.groupBox3);
246图片 268            this.Controls.Add(this.groupBox1);
247图片 269            this.Name = “Form2”;
248图片 270            this.Text = “Form2”;
249图片 271            this.Load += new System.EventHandler(this.Form2_Load);
250图片 272            this.groupBox1.ResumeLayout(false);
251图片 273            this.groupBox2.ResumeLayout(false);
252图片 274            this.groupBox3.ResumeLayout(false);
253图片 275            this.ResumeLayout(false);
254图片 276
255图片 277        }
256图片 278        #endregion
257图片 279
258图片 280        MSMQ.MSMQQueueInfoClass mqinfor=new MSMQQueueInfoClass();
259图片 281        private void Form2_Load(object sender, System.EventArgs e)
260图片 282图片 283        图片 284{
261图片 285            
262图片 286            
263图片 287        }
264图片 288
265图片 289        private void button1_Click(object sender, System.EventArgs e)
266图片 290图片 291        图片 292{
267图片 293            mqinfor.FormatName=”Direct=TCP:” + this.txthost.Text + “\\” + this.txtpath.Text; 
268图片 294            MSMQ.MSMQQueue mq=mqinfor.Open(MSMQ.MQACCESS.MQ_SEND_ACCESS.GetHashCode(),MSMQ.MQSHARE.MQ_DENY_NONE.GetHashCode());
269图片 295            MSMQ.MSMQMessageClass msg=new MSMQMessageClass();
270图片 296            msg.Label=”activeX Test”;
271图片 297            msg.Body=this.txtmsg.Text;
272图片 298            
273图片 299            MSMQ.MSMQTransactionClass MQ_NO_TRANSACTION=new MSMQTransactionClass();
274图片 300            
275图片 301            object a=MQ_NO_TRANSACTION;
276图片 302            msg.Send(mq,ref a);
277图片 303            
278图片 304
279图片 305        }
280图片 306
281图片 307        private void button2_Click(object sender, System.EventArgs e)
282图片 308图片 309        图片 310{
283图片 311            try
284图片 312图片 313            图片 314{
285图片 315                mqinfor.FormatName=”Direct=TCP:” + this.txthost.Text + “\\” + this.txtpath.Text; 
286图片 316            
287图片 317                MSMQ.MSMQQueue mq=mqinfor.Open(MSMQ.MQACCESS.MQ_RECEIVE_ACCESS.GetHashCode(),MSMQ.MQSHARE.MQ_DENY_NONE.GetHashCode());
288图片 318            
289图片 319                MSMQ.MSMQTransactionClass MQ_NO_TRANSACTION=new MSMQTransactionClass();
290图片 320                object a=MQ_NO_TRANSACTION;
291图片 321                bool WantDestinationQueue=false;
292图片 322                object b=WantDestinationQueue;
293图片 323                bool WantBody =true;
294图片 324                object c=WantBody;
295图片 325                long ReceiveTimeout =100;
296图片 326                object d=ReceiveTimeout;
297图片 327                bool WantConnectorType=false;
298图片 328                object e1=WantConnectorType;
299图片 329                MSMQ.MSMQMessage msg=mq.Receive(ref a,ref b,ref c,ref d,ref e1);
300图片 330                this.txtrece.Text=DateTime.Now.ToString() + ” ” + msg.Body.ToString();
301图片 331            }
302图片 332            catch(Exception e2)
303图片 333图片 334            图片 335{
304图片 336                MessageBox.Show(e2.Message);
305图片 337            }
306图片 338        }
307图片 339    }
308图片 340}
309图片 341

相关文章