欢迎光临

木子屋

标题: .NET使用消息队列示例

作者: dnawo

日期: 2010-05-09 05:36 PM

分类: Web编程

内容: 消息队列是Windows 2000、Windows XP、Windows Server 2003的一个组件，并将继续包含在Windows Vista和以后的Windows服务器中。即使目标接收应用程序没有运行，或运行发送或接收应用程序的计算机没有联网，协同合作的应用程序仍能利用消息队列在彼此之间发送和接收消息。在到达目标队列之前，消息由消息队列存储并转发。接收应用程序能够从队列中恢复数据。
消息队列的主要特点在于它分离发送和接收应用程序，使其不必同时运行。这意味着一个应用程序能够把数据存放在队列中，而不用理会队列中的项目是否被传送到接收应用程序。
消息队列包含两个重要的概念：队列和消息。队列用于存放消息，一个队列可以存储多个消息。.NET提供了两个相关的类：MessageQueue类用于管理队列，Message类用于管理消息。
一、安装消息队列组件
①.在控制面板中打开'添加或删除程序"，打开"添加/删除Windows组件"：
②.双击"应用程序服务器"，找到并钩选"消息队列"，然后安装：
③.安装完后在计算机管理的"服务和应用程序"下可看到它：
二、使用消息队列
1.简单消息发送和接收
复制内容到剪贴板 程序代码using System;
using System.Messaging;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string path = @".\private$\MzwuCom";
MessageQueue queue;
Message msg;
//创建队列
if (!MessageQueue.Exists(path))
queue = MessageQueue.Create(path);
else
queue = new MessageQueue(path);
//往队列发送消息
queue.Send("www");
queue.Send("mzwu");
queue.Send("com");
//接收消息
queue.Formatter = new XmlMessageFormatter(new string[] { "System.String" });
try { msg = queue.Receive(TimeSpan.FromSeconds(5)); } //Receive每次取第一个消息，并在队列中将其删除
catch { msg = null; }
while (msg != null)
{
Console.WriteLine(msg.Body.ToString());
try { msg = queue.Receive(TimeSpan.FromSeconds(5)); }
catch { msg = null; }
}
Console.ReadKey();
}
}
}
2. 复杂消息发送和接收
复制内容到剪贴板 程序代码using System;
using System.IO;
using System.Messaging;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string path = @".\private$\MzwuCom";
MessageQueue queue;
Message msg;
FileInfo info;
//创建队列
if (!MessageQueue.Exists(path))
queue = MessageQueue.Create(path);
else
queue = new MessageQueue(path);
//往队列发送消息
msg = new Message();
msg.Formatter = new BinaryMessageFormatter();
msg.Body = new FileInfo(@"c:\www.txt");
queue.Send(msg);
msg.Body = new FileInfo(@"c:\mzwu.txt");
queue.Send(msg);
msg.Body = new FileInfo(@"c:\com.txt");
queue.Send(msg);
//接收消息
queue.Formatter = new BinaryMessageFormatter();
try { msg = queue.Receive(TimeSpan.FromSeconds(5)); }
catch { msg = null; }
while (msg != null)
{
info = msg.Body as FileInfo;
if (info != null)
Console.WriteLine(info.Name);
try { msg = queue.Receive(TimeSpan.FromSeconds(5)); }
catch { msg = null; }
}
Console.ReadKey();
}
}
}

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.813 ms

返回

标题: .NET使用消息队列示例

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.813 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.859 ms

返回