.Net消息队列学习(一)

    技术2022-05-18  14

     .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;            }        }    } 怎样引用队列?    方式一、    通过简单路径引用队列    只有在发送消息的计算机在域模式下运行MSMQ时,才可以使用简单路径引用网络上的公共消息队列。这 样打开队列的请求首先会访问Activte Directory服务器来验证是否在这个队列,然后在网络中解析他的位置。

        方式二、    通过直接路径引用队列我们可以通过直接路径在工作组模式下引用公共或私有队列,甚至在网络断开时也可以。当通过直接路径打开一个队列时,MSMQ不会访问Activte Directory服务器。实际上这个消息会直接发送到路径所指定的队列中去


    最新回复(0)