示例#1
0
        public static Settings CreateSettings(string connectionString, string path, string transferqueue, VSCM_ServiceBusMessage message)
        {
            var settings = new Settings
            {
                ConnectionString = connectionString,
                Path             = path,
                TransferQueue    = transferqueue,
                ConnectivityMode = ConnectivityMode.Tcp,
                SenderCount      = 10,
                TransportType    = TransportType.NetMessaging,
                Messages         = new ConcurrentQueue <BrokeredMessage>(),
                ErrorMessages    = new ConcurrentQueue <ErrorMessage>()
            };

            var partitionKey = Convert.ToString(Guid.NewGuid());

            var messages = new List <VSCM_ServiceBusMessage>
            {
                message
            };

            var brokeredMessages = GetBrokeredMessages(partitionKey, messages);

            foreach (var brokeredMessage in brokeredMessages)
            {
                settings.Messages.Enqueue(brokeredMessage);
            }

            return(settings);
        }
示例#2
0
        private ServiceBusReader.Models.MessageReadResponse ReceiveMessage(object sender, VSCM_ServiceBusMessage message)
        {
            _messages.Enqueue(message);

            Console.WriteLine("Current Message Count: " + _messages.Count);

            //return new ServiceBusReader.Models.MessageReadResponse
            //{
            //    ProcessSuccessful = true
            //};

            return(new ServiceBusReader.Models.MessageReadResponse
            {
                ProcessSuccessful = false,
                DeadLetterReason = "Failed processing",
                DeadLetterErrorDescription = "Test"
            });
        }
示例#3
0
        /// <summary>
        /// Write a single message, to the Visible Service Bus
        /// </summary>
        /// <param name="path">Queue/Topic name to write the message to</param>
        /// <param name="transferqueue">Queue name to use for transactions</param>
        /// <param name="message">Message to be written to the Visible Service Bus</param>
        /// <returns>List of any non accounted for errors thrown</returns>
        public List <ErrorMessage> WriteMessageToServiceBus(string path, string transferqueue, VSCM_ServiceBusMessage message)
        {
            var errors = new List <ErrorMessage>();

            using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions {
                Timeout = new TimeSpan(1, 0, 0, 0)
            }))
            {
                var settings = Settings.CreateSettings(ConfigurationManager.AppSettings.Get("PrimaryConnectionString"), path, transferqueue, message);

                var factory = MessagingFactory.CreateFromConnectionString(settings.ConnectionString);
                factory.RetryPolicy = RetryPolicy.NoRetry;

                var sender = factory.CreateMessageSender(settings.Path, settings.TransferQueue);
                sender.RetryPolicy = RetryPolicy.NoRetry;

                errors.AddRange(SynchronouslyWrite(settings, sender));

                if (!settings.ErrorMessages.IsEmpty)
                {
                    scope.Dispose();
                }
                else
                {
                    scope.Complete();
                }
            }

            if (errors.Any())
            {
                using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions {
                    Timeout = new TimeSpan(1, 0, 0, 0)
                }))
                {
                    var settings = Settings.CreateSettings(ConfigurationManager.AppSettings.Get("SecondaryConnectionString"), path, transferqueue, message);

                    var factory = MessagingFactory.CreateFromConnectionString(settings.ConnectionString);
                    factory.RetryPolicy = RetryPolicy.NoRetry;

                    var sender = factory.CreateMessageSender(settings.Path, settings.TransferQueue);
                    sender.RetryPolicy = RetryPolicy.NoRetry;

                    errors.AddRange(SynchronouslyWrite(settings, sender));

                    if (!settings.ErrorMessages.IsEmpty)
                    {
                        scope.Dispose();
                    }
                    else
                    {
                        scope.Complete();
                    }
                }
            }

            return(errors);
        }