我有一个 TCP 服务器,在 Windows 集群中作为 Windows 服务运行。它接收消息并将它们放入队列 (MSMQ)。我创建了一个公共 MSMQ 队列。我收到此错误消息:
System.Messaging.MessageQueueException (0x80004005): Message Queue service is not available.
at System.Messaging.MessageQueue.MQCacheableInfo.get_WriteHandle()
at System.Messaging.MessageQueue.StaleSafeSendMessage(MQPROPS properties, IntPtr transaction)
at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
我以这种方式将消息发送到队列:
static void SendHelper(UncookedMessage uncooked)
{
var msg = new Message(uncooked);
msg.Formatter = new XmlMessageFormatter(new[] { typeof(UncookedMessage) });
// (PER MESSAGE)
msg.UseJournalQueue = false;
msg.AttachSenderId = false;
msg.Recoverable = true;
SingleQueue.Send(msg);
}
队列安全性为服务器和集群中定义的每个用户提供了完全访问权限。我的队列名称是:FormatName:DIRECT=OS:application9\uncooked_message_single;但我已经测试了application9\ uncooked_message_single 、application9.domain.com\ uncooked_message_single和FormatName:DIRECT=OS:application9.domain.com\uncooked_message_single。没有人工作。
注意:此应用程序与非集群服务器上的私有队列完美配合。我对 Windows 集群了解不多,但我们的管理员说这是一个故障转移集群,它在 Windows Server 2012 上。