qeilf

博客园 首页 新随笔 联系 订阅 管理
 .Net消息队列学习(一)
    下面的示例只是涉及到构建发送者,发送复杂消息等操作。这里的复杂消息包括两种,一种是作者自己封装的一个类,获取对话框中的几个文本对话框的值。第二种是Net中自带的类Message,t填充他的几个属性,代码如下:
 
private System.Messaging.Message setMessage()
        
{
            System.Messaging.Message msg
=new System.Messaging.Message();
            msg.Label
="A message lable";
            msg.Body
="The message body";
            msg.TimeToBeReceived
=TimeSpan.FromSeconds(4000);
            msg.UseDeadLetterQueue
=true;
            
return msg;
        }


        
private void button1_Click(object sender, System.EventArgs e)
        
{
            MessageQueue mq;

            SendForm form
=new SendForm();

            
if(!MessageQueue.Exists(@".\private$\chelei"))
            
{
                
try
                
{
                    mq
=MessageQueue.Create(@".\private$\chelei");
                    form.Name
=this.txtname.Text;
                    form.Sex
=this.txtsex.Text;
                    form.Email
=this.txtemail.Text;
                    form.Address
=this.txtaddress.Text;
                    mq.Send(form,
"信息");
                    mq.Close();
                    MessageQueue.Delete(
@".\private$\chenlei");

                }

                
catch(Exception ex)
                
{
                    MessageBox.Show(ex.Message,
"Warning!");

                
                
//    
                }

            }

            
else
            
{
                
try
                
{
                    mq
=new MessageQueue(@".\private$\chenlei");
                    form.Name
=this.txtname.Text;
                    form.Sex
=this.txtsex.Text;
                    form.Email
=this.txtemail.Text;
                    form.Address
=this.txtaddress.Text;
                    mq.Send(form,
"信息");
                    mq.Close();
                    MessageQueue.Delete(
@".\private$\chenlei");
                }

                
catch(Exception ex)
                
{
                    MessageBox.Show(ex.Message,
"Warning!");

                }


                
            }

        


        }


        
private void button1_Click_1(object sender, System.EventArgs e)
        
{
            
try
            
{
                MessageQueue mq;
                
if(MessageQueue.Exists(@".\private$\aa"))
                
{
                    mq
=new MessageQueue(@".\private$\aa");
                    mq.Send(
this.setMessage());

                }

                
else
                
{
                    mq
=MessageQueue.Create(@".\private$\aa");
                    mq.Send(
this.setMessage());
                }

                mq.Close();
                MessageQueue.Delete(
@".\private$\aa");
            }

            
catch(Exception ex)
            
{
                MessageBox.Show(ex.Message,
"Warning!");
            }

        }


    }
说明:
1、通过设置TimeToBeReceived属性,这个消息可以在目标队列中保存20秒。
如果没有在20秒内从这个队列中读取他,队列就会删除这条消息。
设置UseDeadLetter属性为true可以通知MSMQ在把它从目标队列中删除之前,把消息复制到"Dead-letter messages"系统队列中
2、只有在发送消息的计算机在域模式下运行MSMQ时,才可以使用简单路径引用网络上的公共消息队列
私有队列路径表示:.\private$\aa
公共队列路径表示:.\aa

3、具体的SendForm类如下:
public class SendForm
    
{
        
        
private string m_Name;
        
private string m_Sex;
        
private string m_Email;
        
private string m_Address;
        
public SendForm()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
public SendForm(string name,string sex,string email,string address)
        
{
            
this.m_Name=name;
            
this.m_Sex=sex;
            
this.m_Email=email;
            
this.m_Address=address;

        }

        
public string Name
        
{
            
get
            
{
                
return this.m_Name;
            }

            
set
            
{
                
this.m_Name=value;
            }

        }

        
public string Sex
        
{
            
get
            
{
                
return this.m_Sex;
            }

            
set
            
{
                
this.m_Sex=value;
            }

        }

        
public string Email
        
{
            
get 
            
{
                
return this.m_Email;
            }

            
set
            
{
                
this.m_Email=value;
            }

        }

        
public string Address
        
{
            
get
            
{
                
return this.m_Address;
            }

            
set
            
{
                
this.m_Address=value;
            }

        }

    }
posted on 2006-02-04 16:32  chen lei  阅读(3922)  评论(2编辑  收藏  举报