public async Task Run(string namespaceAddress, string queueName, string sendToken, string receiveToken) { Trace.Listeners.Add(new ConsoleTraceListener()); var sendFactory = MessagingFactory.Create(namespaceAddress, TokenProvider.CreateSharedAccessSignatureTokenProvider(sendToken)); // Create a durable sender. var durableSender = new DurableSender(sendFactory, queueName); /* ** Send messages. */ // Example 1: // Send a message outside a transaction scope. If a transactional MSMQ send queue // is used, (Transactional = true) an internal MSMQ transaction is created. var nonTxMsg = CreateBrokeredMessage(1); Console.WriteLine("Sending message {0} outside of a transaction.", nonTxMsg.Label); durableSender.Send(nonTxMsg); // Example 2: // Send a message inside a transaction scope. var txMsg = CreateBrokeredMessage(2); Console.WriteLine("Sending message {0} within a transaction.", txMsg.Label); using (var scope = new TransactionScope()) { durableSender.Send(txMsg); scope.Complete(); } // Example 3: // Send two messages inside a transaction scope. If another resource manager is used // (e.g., SQL server), the transaction is automatically promoted to a distributed // transaction. If a non-transactional MSMQ send queue is used, (TransactionalSend = false), // sending the message is not part of the transaction. for (var i = 3; i <= 4; i++) { var dtcMsg = CreateBrokeredMessage(i); Console.WriteLine("Sending message {0} within a distributed transaction.", dtcMsg.Label); try { using (var scope = new TransactionScope()) { // SQL Server would be used here, for instance // Send message. durableSender.Send(dtcMsg); scope.Complete(); } } catch (Exception ex) { Console.WriteLine("Sender: " + ex.Message); } } /* ** Receive messages. */ var receiveFactory = MessagingFactory.Create(namespaceAddress, TokenProvider.CreateSharedAccessSignatureTokenProvider(receiveToken)); var receiver = receiveFactory.CreateQueueClient(queueName, ReceiveMode.ReceiveAndDelete); for (var i = 1; i <= 4; i++) { try { var msg = receiver.Receive(); if (msg != null) { PrintBrokeredMessage(msg); } } catch (Exception ex) { Console.WriteLine("Receiver: " + ex.Message); } } /* ** Cleanup */ Console.WriteLine("\nPress ENTER to exit\n"); Console.ReadLine(); durableSender.Dispose(); receiver.Close(); sendFactory.Close(); }