gpt4 book ai didi

c# - 我的 Message Queue 发送的消息去了哪里?

转载 作者:行者123 更新时间:2023-11-30 15:06:56 24 4
gpt4 key购买 nike

我有一个使用 MSMQ 的应用程序,当生产者和消费者都打开时它运行良好同一台机器。

昨天,我第一次尝试创建另一个可以在单独机器上运行的生产者。这queue是私有(private)队列,之前双方都引用为

string strQueueName = ".\Private$\MyQueue";

我尝试了几种方法从远程机器引用这个队列。我的服务器名称是“groucho”,所以我试过了

string strQueueName = "groucho\Private$\MyQueue";

但这始终引发“无效的队列路径名称”异常。

一位开发人员建议我尝试以下操作,这避免了异常:

string strQueueName = "FORMATNAME:DIRECT =OS:grouch\\private$\\SDVQueue";

这不再抛出异常,但它似乎也不起作用,因为我没有查看队列中的消息。

服务器是 Windows Server 2008 R2。队列已设置(我刚刚注意到)以便“Everyone”可以接收和查看,但不能发送,但是当我尝试添加“发送”时,我得到一个错误对话框,显示“无法设置安全描述符,错误:访问被拒绝”。我确实拥有此框的管理员权限。

我从阅读其他帖子中了解到,有各种各样的安全措施在发挥作用,但我在发件人或主机上的事件日志中都没有看到任何错误。

如果这是一个安全问题,我如何才能知道是什么问题?

谢谢!

完整的测试代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Messaging;

namespace RemoteQueue
{
class Program
{
static void Main(string[] args)
{
string name = "FORMATNAME:DIRECT =OS:groucho\\private$\\SDVQueue";;
string input = null;
MessageQueue queue = null;

try
{
queue = new MessageQueue(name);
string key = "key";

for (int i = 0; i < 200; i++)
{
Message msgToSend = new Message();
string value = "value_" + i;

msgToSend.Body = string.Format("{0},{1}", key, value);

Console.WriteLine("Sending message " + i);
queue.Send(msgToSend, "otherpart");
}

}
catch (MessageQueueException me)
{
Console.WriteLine("ERROR: caught message queue exception: " + me.Message);
}

Console.WriteLine("Type any key to exit...");
input = Console.ReadLine();

}
}
}

最佳答案

如果您从一台服务器发送一条消息,然后查看您的出站队列,您应该会看到一个临时队列,该队列是为传输您的消息而创建的。您应该能够在队列中看到您的消息。

现在进入接收服务器。

为了在队列上设置权限,您需要取得它的所有权。在队列属性 -> 安全选项卡 -> 高级 -> 所有者选项卡 -> 将所有者更改为。您应该会在列表中看到您的 Windows 主体。

这将使您能够设置发送权限。完成此操作后,检查发送服务器上的出站队列,现在应该已传输消息。

希望这对您有所帮助。

关于c# - 我的 Message Queue 发送的消息去了哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078362/

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