Ich verwende C# unter Windows Server 2008, und ich möchte eine Nachricht von einer öffentlichen Transaktions-Warteschlange auf einem anderen Computer in der gleichen Domäne erhalten. Der Fehler sieht wie folgt aus:Warum kann ich keine Nachricht von meiner öffentlichen Warteschlange für öffentliche Transaktionen erhalten?
System.Messaging.MessageQueueException: Cannot import the transaction.
at System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan timeout, Int32 action, CursorHandle cursor, MessagePropertyFilter filter, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
at System.Messaging.MessageQueue.Receive(TimeSpan timeout, MessageQueueTransactionType transactionType)
at JobManagerLib.JobProcessor.Process(Action waitForNewMessageCallback) in C:\Dev\OtherProjects\POC\WindowsService\JobManagerSample\JobManagerLib\JobProcessor.cs:line 132
ich DTCPing versucht haben, die in einer Richtung gelingt aber nicht in der anderen. Hier ist der relevante Teil des Protokolls:
++++++++++++hosts ++++++++++++
127.0.0.1 localhost
::1 localhost
08-20, 15:47:22.739-->Error(0x424) at clutil.cpp @256
08-20, 15:47:22.739-->-->OpenCluster
08-20, 15:47:22.739-->-->1060(The specified service does not exist as an installed service.)
++++++++++++++++++++++++++++++++++++++++++++++
DTCping 1.9 Report for DEV-MSMQ2
++++++++++++++++++++++++++++++++++++++++++++++
RPC server is ready
++++++++++++Validating Remote Computer Name++++++++++++
08-20, 15:47:26.207-->Start DTC connection test
Name Resolution:
dev-msmq1-->192.168.22.11-->Dev-msmq1
08-20, 15:47:26.222-->Start RPC test (DEV-MSMQ2-->dev-msmq1)
RPC test failed
Hat jemand eine Idee, warum dies fehlschlagen könnte? Die Windows-Firewall wurde für MSDTC geöffnet. Es ist schwer, viele Informationen über Windows 2008 und MSMQ zu finden.
BEARBEITEN: Die Warteschlangennamen sind FormatName: DIRECT = Betriebssystem: dev-msmq1 \ getmap und FormatName: DIRECT = OS: dev-msmq1 \ logevent. Sie sind öffentliche Transaktions-Queues, und Jeder hat peek/erhalten Erlaubnis für sie. Der zugehörige Teil meines Code ist wie folgt:
using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew))
{
using (var queue = new MessageQueue(QueueName))
{
queue.Formatter = new XmlMessageFormatter(new string[] { _targetParameterType });
var message = queue.Receive(TimeOut, MessageQueueTransactionType.Automatic);
string messageId = message.Label;
...
}
}
Dank
Vielleicht posten Sie Ihren Code oder Ihre Warteschlangenkonfiguration. MSMQ kann bei der Formatierung des Warteschlangennamens wählerisch sein. – Web
Aber was sind die tatsächlichen Namen? (http://technet.microsoft.com/en-us/library/cc778392(WS.10).aspx). Obwohl ich denke, dass es sich auf die Transaktionen bezieht. (MSDTC). Habe das aber nie benutzt. Es tut uns leid. –
Sorry ... Warteschlangennamen, die hier verwendet werden, sind FormatName: DIRECT = Betriebssystem: dev-msmq1 \ SendEmail und FormatName: DIRECT = OS: dev-msmq1 \ LogEvent. –