Net消息队列学习(一)

  • 格式:docx
  • 大小:50.74 KB
  • 文档页数:11

qeilf博客园

首页 新随笔 联系

订阅

管理

9 Posts :: 0 Stories :: 3 Comments :: 0

Trackbacks

.Net消息队列学习(一)

.Net消息队列学习(一)

下面的示例只是涉及到构建发送者,发送复杂消息等操作。这里的复杂消息包括两种,一种是作者自己封装的一个类,获取对话框中的几个文本对话框的值。第二种是Net中自带的类Message,t填充他的几个属性,代码如下:

private System.Messaging.Message setMessage()

{

System.Messaging.Message msg=new System.Messaging.Message();

bel="A message lable";

msg.Body="The message body";

msg.TimeToBeReceived=TimeSpan.FromSeconds(4000);

eDeadLetterQueue=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");

=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");

=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;

}

}

}

Net消息队列学习(一) 续

怎样引用队列?

方式一、

通过简单路径引用队列

只有在发送消息的计算机在域模式下运行MSMQ时,才可以使用简单路径引用网络上的公共消息队列。这 样打开队列的请求首先会访问Activte Directory服务器来验证是否在这个队列,然后在网络中解析他的位置。

方式二、

通过直接路径引用队列

我们可以通过直接路径在工作组模式下引用公共或私有队列,甚至在网络断开时也可以。当通过直接路径打开一个队列时,MSMQ不会访问Activte