Inheritance: IDisposable
Example #1
0
        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();
        }
        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();
        }