Frage

Ich versuche, eine Nachricht zurück in eine MSMQ zu setzen, wenn eine Ausnahme ausgelöst wird. Der folgende Code scheint zu funktionieren, aber die Nachricht nicht in der Warteschlange zurücklegen?

Message msg = null;
try
{
    MessageQueue MQueue = new MessageQueue(txtMsgQPath.Text);
    msg = MQueue.ReceiveById(txtQItemToRead.Text);
    lblMsgRead.Text = msg.Body.ToString(); // This line throws exception
}
catch (Exception ex)
{
    lblMsgRead.Text = ex.Message;
    if (msg != null)
    {
        MessageQueue MQ = new MessageQueue(txtMsgQPath.Text);
        MQ.Send(msg);
    }
}
War es hilfreich?

Lösung

Paar Punkte: Der beste Weg, dies zu tun wäre, um eine Transaktion mit beiden Warteschlangen Spanning; auf diese Weise werden Sie wissen, dass Sie eine Nachricht nicht verlieren.

Der zweite Teil geht es darum, vorsichtig zu sein, wie die Warteschlangen erstellt und wie Sie Nachrichten an die zweite Warteschlange übergeben. Insbesondere scheint manchmal MSMQ zu „fail stumm“, wenn Sie eine Nachricht senden (obwohl in Wirklichkeit eine Fehlermeldung an anderer Stelle in den toten Buchstaben Warteschlangen aufgezeichnet wird), insbesondere wenn die Transaktionsmöglichkeiten des Sende entsprechen nicht die Transaktions Natur des Ziels Warteschlange.

Andere Tipps

Ist es wirklich Ihre Absicht, an den Absender, dass die Nachricht zurück zu senden? Senden an sich selbst zurück ist sehr gefährlich, werden Sie nur wieder bombardieren, immer und immer wieder.

Ich glaube, dass Sie schauen, um „Peek“ auf die Nachricht. Verwendung: MessageQueue.Peek und wenn Sie Erfolg haben, verbrauchen dann die Nachricht

.

ich es geschafft, den obigen Code zu erhalten, indem zu arbeiten, um eine neue Warteschlange erstellen und den Code an der neuen Warteschlange zeigt.

Ich vergleichen dann die zwei Warteschlangen und bemerken, dass die neue Warteschlange war Multicast (die erste Warteschlange war nicht) und die neue Warteschlange hatte ein Label mit dem ersten nicht. Ansonsten schien die Warteschlangen gleich zu sein.

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