gpt4 book ai didi

c# - 如何为作为 Windows 服务的 MSMQ 创建 C# 监听器服务

转载 作者:可可西里 更新时间:2023-11-01 08:25:19 25 4
gpt4 key购买 nike

首先我会说我不是 .NET 开发人员,但我被投入到一个项目中,我需要使用 MSMQ,以便经典的 ASP Web 应用程序可以将消息发送到处理处理的 C# Windows 服务。我有将其他消息队列与其他语言集成的经验,但正如我提到的,我在 .NET 和 Windows 开发方面没有太多经验,因此非常感谢一些指导。

这是我的问题...

  1. 有人可以提供一些基本的 C# 代码来监听现有的 MSMQ 队列并通过执行一些简单的操作(例如将当前时间戳写入日志文件或发送电子邮件)来响应新消息吗?

    <
  2. 如何在 Visual Studio .NET 中打包此代码以创建和安装 Windows 服务? (应该是什么类型的项目等等,我用的是Visual C# 2010 Express。)

  3. 最后,我不确定我需要使用哪个版本和/或 MSMQ 实现来满足我对经典 ASP 的要求。我认为 COM 版本是我所需要的,但我还阅读了有关新 WCF 版本以及 3.0 和 4.0 之间的差异的信息。有人可以指导我应该使用哪个版本吗?

非常感谢!

最佳答案

您可以使用以下代码在给定队列上等待消息(您想在您的计算机上使用名为 SomeQueue 的专用队列,名为 ComputerName => QueueName = @"ComputerName\private$\SomeQueue")

    public void AsyncWatchQueue(object encapsulatedQueueName)
{
Message newMessage;
MessageQueue queue;

string queueName = encapsulatedQueueName as string;
if (queueName == null)
return;

try
{
if (!MessageQueue.Exists(queueName))
MessageQueue.Create(queueName);
else
{
queue = new MessageQueue(queueName);

if (queue.CanRead)
newMessage = queue.Receive();
}
HandleNewMessage(newMessage); // Do something with the message
}
// This exception is raised when the Abort method
// (in the thread's instance) is called
catch (ThreadAbortException e)
{
//Do thread shutdown
}
finally
{
queue.Dispose();
}
}

注意:Receove 方法将阻塞,直到收到一条消息,此时它将从队列中删除该消息并将其返回。

编辑:为多线程部分的实现添加了代码(并重命名了上述方法签名)

线程创建代码:

        public Thread AddWatchingThread(string QueueName)
{
Thread Watcher =
new Thread(new ParameterizedThreadStart(AsyncWatchQueue));
Watcher.Start(QueueName);
// The thread instance is used to manipulate (or shutdown the thread)
return Watcher;
}

我会注意到,这是未经测试的鳕鱼,这只是一个简单的例子

关于c# - 如何为作为 Windows 服务的 MSMQ 创建 C# 监听器服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com