Ich schrieb diesen Code, der funktioniert, aber es machte mich anfangen zu denken, wie sollte ich MSMQ verwenden: Sollte ich eine "using"-Anweisung verwenden, um die Nachrichtenwarteschlange zu erhalten? Die Using-Anweisung sorgt dafür, dass ich die Warteschlange loswerde, wenn ich mit ihr fertig bin, aber wann bin ich mit ihr fertig? Sollte ich mein MessageQueue-Objekt zur Wiederverwendung speichern. Nehmen wir an, es handelt sich um eine ASP.Net-Anwendung und ich möchte 3 Nachrichten aus derselben Aktion an dieselbe Warteschlange senden. Soll ich das Objekt speichern und wiederverwenden oder erstellen und entsorgen, wie ich es gerade tue?
using (MessageQueue msgQueue = new MessageQueue(this.queueName))
{
using (MessageQueueTransaction msgTx = new MessageQueueTransaction())
{
Message recoverableMessage = null;
msgTx.Begin();
try
{
recoverableMessage = new Message();
recoverableMessage.Body = message;
recoverableMessage.Formatter = new BinaryMessageFormatter(System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple, System.Runtime.Serialization.Formatters.FormatterTypeStyle.TypesAlways);
recoverableMessage.Recoverable = true;
msgQueue.Send(recoverableMessage, msgTx);
////this.msgQ.Send(recoverableMessage, msgTx); //whats up here??? this will teach me for taking time off. not sure whuc I shuold use
msgTx.Commit();
result = recoverableMessage.Id;
//recoverableMessage.Dispose();
}
catch (Exception)
{
msgTx.Abort();
////recoverableMessage.Dispose();
}
finally
{
if (recoverableMessage != null)
{
recoverableMessage.Dispose();
}
}
}
}