Frage

Ich schreibe einen Windows-Dienst, die Nachrichten von einem MSMQ und postet sie zu einem Legacy-System (Baan) zieht. Wenn die Post fehlschlägt oder die Maschine geht in der Post nach unten, will ich nicht, um die Nachricht verlieren. Ich verwende daher MSMQ-Transaktionen. Ich Abbruch bei einem Fehler, und ich alles daran setzen, den Erfolg.

Bei der Anwendung gegen eine lokale Warteschlange arbeitet, dieser Code gut funktioniert. Aber in der Produktion werde ich mag die Maschine trennen (oder Maschinen) ausgeführt wird den Dienst aus der Warteschlange selbst. Wenn ich gegen eine entfernte Warteschlange zu testen, wird eine System.Messaging.MessageQueueException geworfen: „Die Transaktion Verwendung ungültig ist“

Ich habe festgestellt, dass die Warteschlange in Frage transaktionale ist.

Hier ist der Code, der aus der Warteschlange erhält:

// Begin a transaction.
_currentTransaction = new MessageQueueTransaction();
_currentTransaction.Begin();

Message message = queue.Receive(wait ? _queueTimeout : TimeSpan.Zero, _currentTransaction);
_logger.Info("Received a message on queue {0}: {1}.", queue.Path, message.Label);
WORK_ITEM item = (WORK_ITEM)message.Body;
return item;

Antwort

Ich habe seit href="http://www.developer.com/db/article.php/3640771" rel="noreferrer"> SQL Service Broker

Andere Tipps

Mit Transaction sollte der MSDTC versehene Arbeit ist auf beiden Maschinen ausgeführt werden.

MessageQueue queue = new MessageQueue("myqueue");
using (TransactionScope tx = new TransactionScope()) {
    Message message = queue.Receive(MessageQueueTransactionType.Automatic);
    tx.Complete();
}

Ich habe da geschaltet SQL Service Broker . Es unterstützt Remote-Transaktions erhalten, während MSMQ 3.0 nicht. Und als zusätzlichen Bonus, es bereits verwendet die SQL Server-Instanz, die wir Cluster und sichern.

Um Sie Transaktionsbereich verwenden müssen, bevor überprüfen, ob MSDTC intalled und Remote-Client-Verbindung aktiviert wurde.

Installieren Sie MSDTC kein Problem ist, aber Remote-Client-Verbindung aktivieren muss Neustart des Servers führen (auf Windows Server 2003 ist dies der Fall ist).

vielleicht dieser Beitrag kann Ihnen helfen: Wie MSDTC und Remote-Aktivierung Client-Verbindung

Aviod Fern MSMQ verwenden (Else Upgrade auf MSMQ 4.0 Remote MSMQ Transaktion zu unterstützen). 1) Alternativ können Sie eine Webservice erstellen, um die Nachrichten zu schieben 2) Erstellen Sie lokale MSMQ für Transaktions Zweck 3) Erstellen kleines Dienstprogramm, das Bündel (Charge) Anzahl und messagenumbers hat ... Sobald der Ansatz gescheitert ist, die Nachrichten an Ziel löschen sonst diese machen als Transaktionsbereich

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top