async Task SessionLockLostExceptionTest()
        {
            var sender        = new MessageSender(TestUtility.NamespaceConnectionString, TestConstants.SessionNonPartitionedQueueName);
            var sessionClient = new SessionClient(TestUtility.NamespaceConnectionString, TestConstants.SessionNonPartitionedQueueName);

            try
            {
                var messageId = "test-message1";
                var sessionId = Guid.NewGuid().ToString();
                await sender.SendAsync(new Message { MessageId = messageId, SessionId = sessionId });

                TestUtility.Log($"Sent Message: {messageId} to Session: {sessionId}");

                var sessionReceiver = await sessionClient.AcceptMessageSessionAsync(sessionId);

                Assert.NotNull(sessionReceiver);
                TestUtility.Log($"Received Session: SessionId: {sessionReceiver.SessionId}: LockedUntilUtc: {sessionReceiver.LockedUntilUtc}");

                var message = await sessionReceiver.ReceiveAsync();

                Assert.True(message.MessageId == messageId);
                TestUtility.Log($"Received Message: MessageId: {message.MessageId}");

                // Let the Session expire with some buffer time
                TestUtility.Log($"Waiting for session lock to time out...");
                await Task.Delay((sessionReceiver.LockedUntilUtc - DateTime.UtcNow) + TimeSpan.FromSeconds(10));

                await Assert.ThrowsAsync <SessionLockLostException>(async() => await sessionReceiver.ReceiveAsync());

                await Assert.ThrowsAsync <SessionLockLostException>(async() => await sessionReceiver.RenewSessionLockAsync());

                await Assert.ThrowsAsync <SessionLockLostException>(async() => await sessionReceiver.GetStateAsync());

                await Assert.ThrowsAsync <SessionLockLostException>(async() => await sessionReceiver.SetStateAsync(null));

                await Assert.ThrowsAsync <SessionLockLostException>(async() => await sessionReceiver.CompleteAsync(message.SystemProperties.LockToken));

                await sessionReceiver.CloseAsync();

                TestUtility.Log($"Closed Session Receiver...");

                //Accept a new Session and Complete the message
                sessionReceiver = await sessionClient.AcceptMessageSessionAsync(sessionId);

                Assert.NotNull(sessionReceiver);
                TestUtility.Log($"Received Session: SessionId: {sessionReceiver.SessionId}");
                message = await sessionReceiver.ReceiveAsync();

                TestUtility.Log($"Received Message: MessageId: {message.MessageId}");
                await sessionReceiver.CompleteAsync(message.SystemProperties.LockToken);

                await sessionReceiver.CloseAsync();
            }
            finally
            {
                await sender.CloseAsync();

                await sessionClient.CloseAsync();
            }
        }
        private static async Task ReceiveSessionMessages(string queueName)
        {
            var sessionClient = new SessionClient(SBConnectionString, queueName, ReceiveMode.ReceiveAndDelete);

            var session = await sessionClient.AcceptMessageSessionAsync();

            if (session != null)
            {
                while (true)
                {
                    var msg = await session.ReceiveAsync(TimeSpan.FromSeconds(2));

                    if (msg == null)
                    {
                        break;
                    }

                    var bodyAsString = Encoding.UTF8.GetString(msg.Body);
                    var seqNo        = msg.SystemProperties.SequenceNumber;
                    Print.White($"{seqNo}--{msg.SessionId}--{bodyAsString}");
                }

                Console.WriteLine($"Received all messages for Session: {session.SessionId}");
                Console.WriteLine("=====================================");
                await session.CloseAsync();
            }
        }
        private static async Task Send(string text)
        {
            var stopwatch = new Stopwatch();

            #region ["Send A Simple Msg"]
            Message simpleMessage = new Message
            {
                Body = StringSupport.GetBytes(text)
            };

            stopwatch.Start();
            // Send the message on the request queue.
            await mSimple.SendAsync(simpleMessage);

            stopwatch.Stop();

            Console.WriteLine("---");
            Console.WriteLine("Simple Msg: {0} ms.", stopwatch.ElapsedMilliseconds);


            #endregion


            #region ["Send Req-Resp Msg"]
            // Create a session identifyer for the response message
            string responseSessionId = Guid.NewGuid().ToString();

            // Create a message using text as the body.
            Message requestMessage = new Message
            {
                SessionId        = responseSessionId,
                Body             = StringSupport.GetBytes(text),
                ReplyToSessionId = responseSessionId
            };
            Console.WriteLine("---");
            Console.WriteLine("Sending request to RequestQueue for processing...");

            stopwatch.Start();
            // Send the message on the request queue.
            await mSender.SendAsync(requestMessage);

            // Accept a session message.
            var responseSession = await mSessionRecvr.AcceptMessageSessionAsync(responseSessionId);

            Message responseMessage = await responseSession.ReceiveAsync();

            stopwatch.Stop();

            await responseSession.CloseAsync();

            #endregion

            // Deserialise the message body to echoText.
            string echoText = StringSupport.GetString(responseMessage.Body);


            Console.WriteLine("Response rcvd from Server.");
            Console.WriteLine(echoText);
            Console.WriteLine("Req-Resp (Total) Time: {0} ms.", stopwatch.ElapsedMilliseconds);
        }
Esempio n. 4
0
        private static async Task CleanUpEntity(string connectionString, string entityPAth)
        {
            var client = new SessionClient(connectionString, entityPAth, ReceiveMode.PeekLock);

            client.OperationTimeout = TimeSpan.FromSeconds(5);

            IMessageSession session = null;

            try
            {
                session = await client.AcceptMessageSessionAsync();

                var messages = await session.ReceiveAsync(1000, TimeSpan.FromSeconds(1));

                await session.CompleteAsync(messages.Select(m => m.SystemProperties.LockToken));
            }
            catch (ServiceBusException)
            {
            }
            finally
            {
                if (session != null)
                {
                    await session.CloseAsync();
                }
            }
        }
Esempio n. 5
0
        async Task EventsAreNotFiredWhenDiagnosticsIsDisabled()
        {
            this.messageSender = new MessageSender(TestUtility.NamespaceConnectionString,
                                                   TestConstants.SessionNonPartitionedQueueName);
            this.sessionClient = new SessionClient(TestUtility.NamespaceConnectionString,
                                                   TestConstants.SessionNonPartitionedQueueName, ReceiveMode.ReceiveAndDelete);

            this.listener.Disable();

            var sessionId = Guid.NewGuid().ToString();

            await this.messageSender.SendAsync(new Message
            {
                MessageId = "messageId",
                SessionId = sessionId
            });

            this.messageSession = await sessionClient.AcceptMessageSessionAsync(sessionId);

            await this.messageSession.SetStateAsync(new byte[] { 1 });

            await this.messageSession.GetStateAsync();

            await this.messageSession.SetStateAsync(new byte[] { });

            await this.messageSession.ReceiveAsync();

            Assert.True(events.IsEmpty);
        }
        private static async Task StartSessionSender(string sessionId, ConsoleColor color)
        {
            var message = new Message
            {
                ReplyToSessionId = sessionId,
                ReplyTo          = "sender"
            };

            var sender = new MessageSender(Configuration.ServiceBusConnectionString, "worker");

            await sender.SendAsync(message);

            Logger.Log($"[{sessionId}] write to worker queue", color);

            var client  = new SessionClient(Configuration.ServiceBusConnectionString, "sender");
            var session = await client.AcceptMessageSessionAsync(sessionId, new TimeSpan(0, 1, 0));

            while (true)
            {
                if (session.IsClosedOrClosing)
                {
                    return;
                }
                var receivedMessage = await session.ReceiveAsync();

                if (receivedMessage == null)
                {
                    continue;
                }
                Logger.Log($"[{sessionId}] Received message {receivedMessage.UserProperties["result"]}", color);
                await session.CompleteAsync(receivedMessage.SystemProperties.LockToken);
            }
        }
        private async Task ReceiveResponse(string sessionId)
        {
            try
            {
                SessionClient   sessionClient  = new SessionClient(_connectionString, _queueServerName);
                IMessageSession messageSession = await sessionClient.AcceptMessageSessionAsync(sessionId);

                Message messagePayload = await messageSession.ReceiveAsync();

                if (messagePayload != null)
                {
                    string message = Encoding.UTF8.GetString(messagePayload.Body);
                    ReplyListBox.Items.Add(ConstructMessageListBox(sessionId, message, false));
                }
                else
                {
                    ReplyListBox.Items.Add(ConstructMessageListBox(sessionId, "Failed getting response", false));
                }
                await messageSession.CloseAsync();

                await sessionClient.CloseAsync();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Esempio n. 8
0
        public override MessageContext ReceiveOnTopic(MessageContext inputcontext, IMessageAdapter adapter)
        {
            var entity = EntityNameHelper.FormatSubscriptionPath(inputcontext.ToReplyPath, inputcontext.ToReplySubscription);

            var client = new SessionClient(inputcontext.ToReplyConnectionString, entity);

            var messagesession = client.AcceptMessageSessionAsync(inputcontext.ReplyToRequestId).GetAwaiter().GetResult();

            var message = inputcontext.ToReplyTimeOut != 0 ? messagesession.ReceiveAsync(TimeSpan.FromSeconds(inputcontext.ToReplyTimeOut)).GetAwaiter().GetResult() : messagesession.ReceiveAsync().GetAwaiter().GetResult();

            MessageContext outputcontext = null;

            if (message != null)
            {
                outputcontext = adapter.Read(message, inputcontext.ResultType);

                messagesession.CompleteAsync(message.SystemProperties.LockToken);
            }

            messagesession.CloseAsync().GetAwaiter().GetResult();

            client.CloseAsync().GetAwaiter().GetResult();

            return(outputcontext);
        }
Esempio n. 9
0
        public async Task ReceiveDeferredMessageForSessionTest(string qName)
        {
            var sessionId = Guid.NewGuid().ToString("N").Substring(0, 8);
            var messageId = Guid.NewGuid().ToString("N").Substring(0, 8);

            var sender = new MessageSender(TestUtility.NamespaceConnectionString, qName);
            await sender.SendAsync(new Message()
            {
                SessionId = sessionId, MessageId = messageId
            });

            var sessionClient  = new SessionClient(TestUtility.NamespaceConnectionString, qName);
            var messageSession = await sessionClient.AcceptMessageSessionAsync(sessionId);

            var msg = await messageSession.ReceiveAsync();

            var seqNum = msg.SystemProperties.SequenceNumber;
            await messageSession.DeferAsync(msg.SystemProperties.LockToken);

            var msg2 = await messageSession.ReceiveDeferredMessageAsync(seqNum);

            Assert.Equal(seqNum, msg2.SystemProperties.SequenceNumber);
            Assert.Equal(messageId, msg2.MessageId);

            await sender.CloseAsync();

            await sessionClient.CloseAsync();

            await messageSession.CloseAsync();
        }
        async Task OperationsOnMessageSessionAfterCloseShouldThrowObjectDisposedExceptionTest()
        {
            var             sender          = new MessageSender(TestUtility.NamespaceConnectionString, TestConstants.SessionNonPartitionedQueueName);
            var             sessionClient   = new SessionClient(TestUtility.NamespaceConnectionString, TestConstants.SessionNonPartitionedQueueName);
            IMessageSession sessionReceiver = null;

            try
            {
                var messageId = "test-message1";
                var sessionId = Guid.NewGuid().ToString();
                await sender.SendAsync(new Message { MessageId = messageId, SessionId = sessionId });

                TestUtility.Log($"Sent Message: {messageId} to Session: {sessionId}");

                sessionReceiver = await sessionClient.AcceptMessageSessionAsync(sessionId);

                Assert.NotNull(sessionReceiver);
                TestUtility.Log($"Received Session: SessionId: {sessionReceiver.SessionId}: LockedUntilUtc: {sessionReceiver.LockedUntilUtc}");

                await sessionReceiver.CloseAsync();

                await Assert.ThrowsAsync <ObjectDisposedException>(async() => await sessionReceiver.ReceiveAsync());

                await Assert.ThrowsAsync <ObjectDisposedException>(async() => await sessionReceiver.GetStateAsync());

                await Assert.ThrowsAsync <ObjectDisposedException>(async() => await sessionReceiver.SetStateAsync(null));

                sessionReceiver = await sessionClient.AcceptMessageSessionAsync(sessionId);

                Assert.NotNull(sessionReceiver);
                TestUtility.Log($"Reaccept Session: SessionId: {sessionReceiver.SessionId}: LockedUntilUtc: {sessionReceiver.LockedUntilUtc}");

                var message = await sessionReceiver.ReceiveAsync();

                Assert.True(message.MessageId == messageId);
                TestUtility.Log($"Received Message: MessageId: {message.MessageId}");
                await sessionReceiver.CompleteAsync(message.SystemProperties.LockToken);

                await sessionReceiver.CloseAsync();
            }
            finally
            {
                await sender.CloseAsync();

                await sessionClient.CloseAsync();
            }
        }
        async Task SessionRenewLockTest(string queueName)
        {
            var sender        = new MessageSender(TestUtility.NamespaceConnectionString, queueName);
            var sessionClient = new SessionClient(TestUtility.NamespaceConnectionString, queueName);

            try
            {
                var messageId = "test-message1";
                var sessionId = Guid.NewGuid().ToString();
                await sender.SendAsync(new Message()
                {
                    MessageId = messageId, SessionId = sessionId
                });

                TestUtility.Log($"Sent Message: {messageId} to Session: {sessionId}");

                var sessionReceiver = await sessionClient.AcceptMessageSessionAsync(sessionId);

                Assert.NotNull(sessionReceiver);
                TestUtility.Log($"Session LockedUntilUTC: {sessionReceiver.LockedUntilUtc} for Session: {sessionReceiver.SessionId}");
                Message message = await sessionReceiver.ReceiveAsync();

                TestUtility.Log($"Received Message: {message.MessageId} from Session: {sessionReceiver.SessionId}");
                Assert.True(message.MessageId == messageId);

                TestUtility.Log("Sleeping 10 seconds...");
                await Task.Delay(TimeSpan.FromSeconds(10));

                // For session it looks like when the session is received, sometimes the session LockedUntil UTC
                // is turning out slightly more than the Default Lock Duration(lock is for 1 minute, but the session was locked
                // for 1 min and 2 seconds. We will need to look at if this is an issue on service or some kind of time SKU.
                // Temporarily changing this test to look at the renew request time instead.
                DateTime renewRequestTime = DateTime.UtcNow;
                await sessionReceiver.RenewSessionLockAsync();

                DateTime firstLockedUntilUtcTime = sessionReceiver.LockedUntilUtc;
                TestUtility.Log($"After Renew Session LockedUntilUTC: {firstLockedUntilUtcTime} for Session: {sessionReceiver.SessionId}");
                Assert.True(firstLockedUntilUtcTime >= renewRequestTime + TimeSpan.FromSeconds(10));

                TestUtility.Log("Sleeping 5 seconds...");
                await Task.Delay(TimeSpan.FromSeconds(5));

                renewRequestTime = DateTime.UtcNow;
                await sessionReceiver.RenewSessionLockAsync();

                TestUtility.Log($"After Second Renew Session LockedUntilUTC: {sessionReceiver.LockedUntilUtc} for Session: {sessionReceiver.SessionId}");
                Assert.True(sessionReceiver.LockedUntilUtc >= renewRequestTime + TimeSpan.FromSeconds(5));
                await sessionReceiver.CompleteAsync(message.SystemProperties.LockToken);

                TestUtility.Log($"Completed Message: {message.MessageId} for Session: {sessionReceiver.SessionId}");
                await sessionReceiver.CloseAsync();
            }
            finally
            {
                await sender.CloseAsync().ConfigureAwait(false);

                await sessionClient.CloseAsync().ConfigureAwait(false);
            }
        }
Esempio n. 12
0
        public async Task TransactionalSessionDispositionTest(string queueName)
        {
            var             sender        = new MessageSender(ConnectionString, queueName);
            var             sessionClient = new SessionClient(ConnectionString, queueName);
            IMessageSession receiver      = null;

            try
            {
                string body    = Guid.NewGuid().ToString("N");
                var    message = new Message(body.GetBytes())
                {
                    SessionId = body
                };
                await sender.SendAsync(message).ConfigureAwait(false);

                receiver = await sessionClient.AcceptMessageSessionAsync(body);

                var receivedMessage = await receiver.ReceiveAsync(ReceiveTimeout);

                Assert.NotNull(receivedMessage);
                Assert.Equal(body, receivedMessage.Body.GetString());

                using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
                {
                    await receiver.CompleteAsync(receivedMessage.SystemProperties.LockToken);

                    ts.Dispose();
                }

                // Adding delay since transaction Commit/Rollback is an asynchronous operation.
                // Operating on the same message should not be done.
                await Task.Delay(TimeSpan.FromSeconds(2));

                using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
                {
                    await receiver.CompleteAsync(receivedMessage.SystemProperties.LockToken);

                    ts.Complete();
                }

                // Adding delay since transaction Commit/Rollback is an asynchronous operation.
                // Operating on the same message should not be done.
                await Task.Delay(TimeSpan.FromSeconds(2));

                await Assert.ThrowsAsync <SessionLockLostException>(async() => await receiver.CompleteAsync(receivedMessage.SystemProperties.LockToken));
            }
            finally
            {
                await sender.CloseAsync();

                await sessionClient.CloseAsync();

                if (receiver != null)
                {
                    await receiver.CloseAsync();
                }
            }
        }
Esempio n. 13
0
        public async Task GetAndSetSessionStateTest(bool partitioned, bool sessionEnabled)
        {
            await ServiceBusScope.UsingQueueAsync(partitioned, sessionEnabled, async queueName =>
            {
                var sender        = new MessageSender(TestUtility.NamespaceConnectionString, queueName);
                var sessionClient = new SessionClient(TestUtility.NamespaceConnectionString, queueName);

                try
                {
                    var messageId = "test-message1";
                    var sessionId = Guid.NewGuid().ToString();
                    await sender.SendAsync(new Message
                    {
                        MessageId = messageId,
                        SessionId = sessionId
                    });
                    TestUtility.Log($"Sent Message: {messageId} to Session: {sessionId}");

                    var sessionReceiver = await sessionClient.AcceptMessageSessionAsync(sessionId);
                    Assert.NotNull(sessionReceiver);
                    var message = await sessionReceiver.ReceiveAsync();
                    TestUtility.Log($"Received Message: {message.MessageId} from Session: {sessionReceiver.SessionId}");
                    Assert.True(message.MessageId == messageId);

                    var sessionStateString = "Received Message From Session!";
                    var sessionState       = Encoding.UTF8.GetBytes(sessionStateString);
                    await sessionReceiver.SetStateAsync(sessionState);
                    TestUtility.Log($"Set Session State: {sessionStateString} for Session: {sessionReceiver.SessionId}");

                    var returnedSessionState       = await sessionReceiver.GetStateAsync();
                    var returnedSessionStateString = Encoding.UTF8.GetString(returnedSessionState);
                    TestUtility.Log($"Get Session State Returned: {returnedSessionStateString} for Session: {sessionReceiver.SessionId}");
                    Assert.Equal(sessionStateString, returnedSessionStateString);

                    // Complete message using Session Receiver
                    await sessionReceiver.CompleteAsync(message.SystemProperties.LockToken);
                    TestUtility.Log($"Completed Message: {message.MessageId} for Session: {sessionReceiver.SessionId}");

                    sessionStateString = "Completed Message On Session!";
                    sessionState       = Encoding.UTF8.GetBytes(sessionStateString);
                    await sessionReceiver.SetStateAsync(sessionState);
                    TestUtility.Log($"Set Session State: {sessionStateString} for Session: {sessionReceiver.SessionId}");

                    returnedSessionState       = await sessionReceiver.GetStateAsync();
                    returnedSessionStateString = Encoding.UTF8.GetString(returnedSessionState);
                    TestUtility.Log($"Get Session State Returned: {returnedSessionStateString} for Session: {sessionReceiver.SessionId}");
                    Assert.Equal(sessionStateString, returnedSessionStateString);

                    await sessionReceiver.CloseAsync();
                }
                finally
                {
                    await sender.CloseAsync();
                    await sessionClient.CloseAsync();
                }
            });
        }
Esempio n. 14
0
        async Task <long> DoPurgeSessionEntity(long messagesToPurgeCount)
        {
            long totalMessagesPurged = 0;

            ISessionClient sessionClient = new SessionClient(
                serviceBusHelper.ConnectionString,
                GetEntityPath(deadLetterQueue: false),
                null,
                receiveMode: ReceiveMode.ReceiveAndDelete,
                retryPolicy: RetryPolicy.Default,
                prefetchCount: 10,
                transportType: serviceBusHelper.TransportType);

            var consecutiveSessionTimeOuts = 0;

            try
            {
                const int enoughZeroReceives = 3;
                while (consecutiveSessionTimeOuts < enoughZeroReceives && totalMessagesPurged < messagesToPurgeCount)
                {
                    IMessageSession session = await sessionClient.AcceptMessageSessionAsync();

                    var consecutiveZeroBatchReceives = 0;
                    while (consecutiveZeroBatchReceives < enoughZeroReceives &&
                           totalMessagesPurged < messagesToPurgeCount)
                    {
                        var messages = await session.ReceiveAsync(1000, TimeSpan.FromMilliseconds(1000))
                                       .ConfigureAwait(false);

                        if (messages != null && messages.Any())
                        {
                            Interlocked.Add(ref totalMessagesPurged, messages.Count());
                            consecutiveZeroBatchReceives = 0;
                        }
                        else
                        {
                            ++consecutiveZeroBatchReceives;
                        }
                    }

                    await session.CloseAsync().ConfigureAwait(false);
                }
            }
            catch (TimeoutException)
            {
                ++consecutiveSessionTimeOuts;
            }
            finally
            {
                await sessionClient.CloseAsync().ConfigureAwait(false);
            }

            return(totalMessagesPurged);
        }
Esempio n. 15
0
        private static async Task ReadMessage(string connectionString, string sessionId)
        {
            var sessionClient = new SessionClient(connectionString, "session-queue-test");
            var session       = await sessionClient.AcceptMessageSessionAsync(sessionId);

            var message = await session.ReceiveAsync();

            await session.CompleteAsync(message.SystemProperties.LockToken);

            string messageBody = Encoding.UTF8.GetString(message.Body);

            Console.WriteLine("Message received: {0}", messageBody);
        }
Esempio n. 16
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Client Console");

            while (true)
            {
                Console.WriteLine("Enter text:");
                string text = Console.ReadLine();

                // Create a session identifier for the response message

                string responseSessionId = Guid.NewGuid().ToString();

                // Create a message using text as the body.
                var requestMessage = new Message(Encoding.UTF8.GetBytes(text));

                // Set the appropriate message properties.
                //Send the first message to the first queue with the
                // responseID set
                requestMessage.ReplyToSessionId = responseSessionId;

                var stopwatch = Stopwatch.StartNew();

                // Send the message on the request queue.
                await RequestQueueClient.SendAsync(requestMessage);

                // Create a session client
                // wait for the server to responsd with the same SessionId
                // by creating a session client
                var sessionClient =
                    new SessionClient("ConnectionString", "QueueName");

                // Accept a message session
                var messageSession = await sessionClient.AcceptMessageSessionAsync(responseSessionId);

                // Receive the response message.
                var responseMessage = await messageSession.ReceiveAsync();

                stopwatch.Stop();

                // Close the session, we got the message.
                await sessionClient.CloseAsync();

                // Deserialise the message body to echoText.
                string echoText = Encoding.UTF8.GetString(responseMessage.Body);

                Console.WriteLine(echoText);
                Console.WriteLine("Time: {0} ms.", stopwatch.ElapsedMilliseconds);
                Console.WriteLine();
            }
        }
Esempio n. 17
0
        public List <Message> ReceiveMessages(Dictionary <string, string> topicAndSubscriptionReceived, string tokenID)
        {
            if (topicAndSubscriptionReceived.Count < 1)
            {
                return(null);
            }

            List <Message>  listMessage         = new List <Message>();
            Action <object> delegateGetMessages = (topicSubscriptionMessage) =>
            {
                var             messageFound  = (KeyValuePair <string, string>)topicSubscriptionMessage;
                ISessionClient  sessionClient = new SessionClient(appOptions.BusConnectionString, EntityNameHelper.FormatSubscriptionPath(messageFound.Key, messageFound.Value), ReceiveMode.PeekLock);
                IMessageSession session       = sessionClient.AcceptMessageSessionAsync(tokenID).GetAwaiter().GetResult();
                while (true)
                {
                    Message message = session.ReceiveAsync(new TimeSpan(0, 0, 20)).GetAwaiter().GetResult();
                    if (message == null)
                    {
                        session.CloseAsync().GetAwaiter().GetResult();
                        sessionClient.CloseAsync().GetAwaiter().GetResult();
                        break;
                    }
                    else
                    {
                        session.CompleteAsync(message.SystemProperties.LockToken).GetAwaiter().GetResult();
                        listMessage.Add(message);
                    }
                }
            };

            Task[] taskArray = new Task[topicAndSubscriptionReceived.Count];
            List <KeyValuePair <string, string> > lstTopicAndSubscriptionReceived = new List <KeyValuePair <string, string> >();

            foreach (KeyValuePair <string, string> topicAndSubscription in topicAndSubscriptionReceived)
            {
                lstTopicAndSubscriptionReceived.Add(topicAndSubscription);
            }

            for (int i = 0; i < taskArray.Length; i++)
            {
                taskArray[i] = Task.Factory.StartNew(delegateGetMessages, lstTopicAndSubscriptionReceived[i]);
            }
            Task.WaitAll(taskArray);

            return(listMessage);
        }
        public async Task QueueSessionEventsAreNotFiredWhenDiagnosticsIsDisabled()
        {
            await ServiceBusScope.UsingQueueAsync(partitioned : false, sessionEnabled : true, async queueName =>
            {
                var messageSender  = new MessageSender(TestUtility.NamespaceConnectionString, queueName);
                var sessionClient  = new SessionClient(TestUtility.NamespaceConnectionString, queueName, ReceiveMode.ReceiveAndDelete);
                var messageSession = default(IMessageSession);
                var eventQueue     = this.CreateEventQueue();

                try
                {
                    using (var listener = this.CreateEventListener(queueName, eventQueue))
                        using (var subscription = this.SubscribeToEvents(listener))
                        {
                            listener.Disable();

                            var sessionId = Guid.NewGuid().ToString();
                            await messageSender.SendAsync(new Message
                            {
                                MessageId = "messageId",
                                SessionId = sessionId
                            });

                            messageSession = await sessionClient.AcceptMessageSessionAsync(sessionId);

                            await messageSession.SetStateAsync(new byte[] { 1 });
                            await messageSession.GetStateAsync();
                            await messageSession.SetStateAsync(new byte[] { });
                            await messageSession.ReceiveAsync();

                            Assert.True(eventQueue.IsEmpty, "There were events present when none were expected");
                        }
                }
                finally
                {
                    await Task.WhenAll(
                        messageSession?.CloseAsync(),
                        messageSender.CloseAsync(),
                        sessionClient.CloseAsync());
                }
            });
        }
Esempio n. 19
0
        public async Task <T> RecibeMensajeSesion(string cadenaConexion, string nombreCola, string sesionId, int segundos, int intentos)
        {
            int contador  = 0;
            T   respuesta = default(T);
            var serviceBusConnectionStringBuilder = new ServiceBusConnectionStringBuilder(cadenaConexion);

            var serviceBusConnection = new ServiceBusConnection(serviceBusConnectionStringBuilder);

            var sessionClient = new SessionClient(serviceBusConnection, nombreCola, ReceiveMode.PeekLock, null, 0);

            var messageSession = await sessionClient.AcceptMessageSessionAsync(sesionId, TimeSpan.FromMinutes(1));

            if (messageSession != null)
            {
                while (contador < intentos)
                {
                    Message message = await messageSession.ReceiveAsync(TimeSpan.FromSeconds(5));

                    if (message != null)
                    {
                        var bodyText = System.Text.Encoding.UTF8.GetString(message.Body);
                        respuesta = JsonConvert.DeserializeObject <T>(bodyText);

                        await messageSession.CompleteAsync(message.SystemProperties.LockToken);

                        contador = intentos;
                    }
                    else
                    {
                        await Task.Delay(segundos * 1000);
                    }
                    contador++;
                }
            }
            await messageSession.CloseAsync();

            await sessionClient.CloseAsync();

            await serviceBusConnection.CloseAsync();

            return(respuesta);
        }
Esempio n. 20
0
        public async Task AcceptSessionThrowsSessionCannotBeLockedException()
        {
            var             sessionClient = new SessionClient(TestUtility.NamespaceConnectionString, TestConstants.SessionNonPartitionedQueueName);
            var             someSessionId = "someSessionId";
            IMessageSession session       = null;

            try
            {
                session = await sessionClient.AcceptMessageSessionAsync(someSessionId);

                await Assert.ThrowsAsync <SessionCannotBeLockedException>(async() =>
                                                                          session = await sessionClient.AcceptMessageSessionAsync(someSessionId));
            }
            finally
            {
                await sessionClient.CloseAsync().ConfigureAwait(false);

                await session?.CloseAsync();
            }
        }
Esempio n. 21
0
        public async Task <string> GetResponseServiceBus()
        {
            var sessionClient = new SessionClient(_connectionStrings.ServiceBus, _responseQueueName);

            IMessageSession session = await sessionClient.AcceptMessageSessionAsync(HttpContext.Session.Id);

            if (session != null)
            {
                Message message = await session.ReceiveAsync();

                if (message != null)
                {
                    await session.CompleteAsync(message.SystemProperties.LockToken);

                    return(Encoding.UTF8.GetString(message.Body));
                }
                await session.CloseAsync();
            }
            return(string.Empty);
        }
Esempio n. 22
0
        async Task AcceptAndCompleteSessionsAsync(SessionClient sessionClient, string sessionId, string messageId)
        {
            var sessionReceiver = await sessionClient.AcceptMessageSessionAsync(sessionId);

            if (sessionId != null)
            {
                Assert.True(sessionReceiver.SessionId == sessionId);
            }

            var message = await sessionReceiver.ReceiveAsync();

            Assert.True(message.MessageId == messageId);
            TestUtility.Log($"Received Message: {message.MessageId} from Session: {sessionReceiver.SessionId}");

            await sessionReceiver.CompleteAsync(message.SystemProperties.LockToken);

            TestUtility.Log($"Completed Message: {message.MessageId} for Session: {sessionReceiver.SessionId}");

            await sessionReceiver.CloseAsync();
        }
Esempio n. 23
0
        async Task PeekAndDeleteMessageAsync(SessionClient sessionClient, string sessionId, string messageId)
        {
            var sessionReceiver = await sessionClient.AcceptMessageSessionAsync(sessionId);

            if (sessionId != null)
            {
                Assert.True(sessionReceiver.SessionId == sessionId);
            }

            var message = await sessionReceiver.PeekAsync();

            Assert.True(message.MessageId == messageId);
            TestUtility.Log($"Peeked Message: {message.MessageId} from Session: {sessionReceiver.SessionId}");

            message = await sessionReceiver.ReceiveAsync();

            Assert.True(message.MessageId == messageId);
            TestUtility.Log($"Received Message: {message.MessageId} from Session: {sessionReceiver.SessionId}");

            await sessionReceiver.CloseAsync();
        }
Esempio n. 24
0
        public async Task AcceptSessionThrowsSessionCannotBeLockedException()
        {
            await ServiceBusScope.UsingQueueAsync(partitioned : true, sessionEnabled : true, async queueName =>
            {
                var sessionClient       = new SessionClient(TestUtility.NamespaceConnectionString, queueName);
                var someSessionId       = "someSessionId";
                IMessageSession session = null;

                try
                {
                    session = await sessionClient.AcceptMessageSessionAsync(someSessionId);
                    await Assert.ThrowsAsync <SessionCannotBeLockedException>(async() =>
                                                                              session = await sessionClient.AcceptMessageSessionAsync(someSessionId));
                }
                finally
                {
                    await sessionClient.CloseAsync();
                    await session?.CloseAsync();
                }
            });
        }
Esempio n. 25
0
        public async Task <TResponse> SendRequest(TRequest request)
        {
            var sw = new Stopwatch();

            sw.Start();

            var sessionId = Guid.NewGuid().ToString("N");

            var message = Helpers.CreateMessage(request);

            message.ReplyTo          = receiveResponseQueueName;
            message.ReplyToSessionId = sessionId;

            var sessionClient  = new SessionClient(connectionStr, receiveResponseQueueName);
            var messageSession = await sessionClient.AcceptMessageSessionAsync(sessionId);

            var receiveTask = messageSession.ReceiveAsync(TimeSpan.FromSeconds(20));

            // SEND!
            RequestSending?.Invoke(request, message);
            await client.SendAsync(message);

            // RECEIVE!
            var responseMsg = await receiveTask;
            await messageSession.CloseAsync();

            sw.Stop();
            AverageRTTms = (AverageRTTms * sendCount + sw.ElapsedMilliseconds) / (++sendCount);
            if (sw.ElapsedMilliseconds < MinRTTms || MinRTTms == 0)
            {
                MinRTTms = sw.ElapsedMilliseconds;
            }
            if (sw.ElapsedMilliseconds > MaxRTTms)
            {
                MaxRTTms = sw.ElapsedMilliseconds;
            }

            return(Helpers.DecodeMessage <TResponse>(responseMsg));
        }
Esempio n. 26
0
        public async Task <Dictionary <string, string> > CheckMessagesReceived(string subscriptionName, string tokenID)
        {
            List <Message> message = new List <Message>();
            Dictionary <string, string> topicAndSubscriptionFound = new Dictionary <string, string>();
            var topicsRegistered = await new ManageAzurePortal().CheckTopics(subscriptionName);

            if (topicsRegistered.Count > 0)
            {
                Action <object> delegateCheck = (topic) =>
                {
                    ISessionClient  sessionClient = new SessionClient(appOptions.BusConnectionString, EntityNameHelper.FormatSubscriptionPath(topic.ToString(), subscriptionName), ReceiveMode.PeekLock);
                    IMessageSession session       = sessionClient.AcceptMessageSessionAsync(tokenID).GetAwaiter().GetResult();
                    if (session != null)
                    {
                        message = (List <Message>)session.ReceiveAsync(1, new TimeSpan(0, 0, 20)).GetAwaiter().GetResult();
                        if (message == null)
                        {
                            session.CloseAsync().GetAwaiter().GetResult();
                            sessionClient.CloseAsync().GetAwaiter().GetResult();
                        }
                        else
                        {
                            topicAndSubscriptionFound.Add(topic.ToString(), subscriptionName);
                            session.CloseAsync().GetAwaiter().GetResult();
                            sessionClient.CloseAsync().GetAwaiter().GetResult();
                        }
                    }
                };

                Task[] taskArray = new Task[topicsRegistered.Count];
                for (int i = 0; i < taskArray.Length; i++)
                {
                    taskArray[i] = Task.Factory.StartNew(delegateCheck, topicsRegistered[i]);
                }
                Task.WaitAll(taskArray);
            }
            return(topicAndSubscriptionFound);
        }
Esempio n. 27
0
        public override MessageContext ReceiveOnQueue(Channel channel, MessageContext context, IMessageAdapter adapter)
        {
            var client = new SessionClient(channel.ToReplyConnectionString, channel.ToReplyPath);

            var messagesession = client.AcceptMessageSessionAsync(context.Identity.ReplyToRequestId).GetAwaiter().GetResult();

            var message = channel.ToReplyTimeOut != 0 ? messagesession.ReceiveAsync(TimeSpan.FromSeconds(channel.ToReplyTimeOut)).GetAwaiter().GetResult() : messagesession.ReceiveAsync().GetAwaiter().GetResult();

            MessageContext outputcontext = null;

            if (message != null)
            {
                outputcontext = adapter.Read(message, context.ResultType, context.EndPoint.UseClaimCheck);

                messagesession.CompleteAsync(message.SystemProperties.LockToken);
            }

            messagesession.CloseAsync().GetAwaiter().GetResult();

            client.CloseAsync().GetAwaiter().GetResult();

            return(outputcontext);
        }
Esempio n. 28
0
        static async Task ReceiveMessage(string sessionId)
        {
            try
            {
                SessionClient   sessionClient  = new SessionClient(_connectionString, _queueServerName);
                IMessageSession messageSession = await sessionClient.AcceptMessageSessionAsync(sessionId);

                Message message = await messageSession.ReceiveAsync();

                if (message != null)
                {
                    string messageText = Encoding.UTF8.GetString(message.Body);
                    Console.WriteLine($"[{DateTime.Now}] Reply from server: {messageText}");
                }
                await messageSession.CloseAsync();

                await sessionClient.CloseAsync();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[x] Error: {ex.Message}");
            }
        }
        private static async Task ClenaUpEntity(string connectionString, string entityPAth)
        {
            var client = new SessionClient(connectionString, entityPAth, ReceiveMode.PeekLock);

            client.OperationTimeout = TimeSpan.FromSeconds(5);

            IMessageSession session = null;

            try
            {
                session = await client.AcceptMessageSessionAsync();

                while (true)
                {
                    var message = await session.ReceiveAsync(TimeSpan.FromSeconds(5));

                    if (message != null)
                    {
                        await session.CompleteAsync(message.SystemProperties.LockToken);
                    }
                    else
                    {
                        break;
                    }
                }
            }
            catch (ServiceBusException)
            {
            }
            finally
            {
                if (session != null)
                {
                    await session.CloseAsync();
                }
            }
        }
Esempio n. 30
0
        private static async Task InitializeReceiver(string connectionString, string queueName)
        {
            var sessionClient = new SessionClient(connectionString, queueName, ReceiveMode.PeekLock);

            var expectedLockMessage = RandomBreakingMessage().ToList();

            while (true)
            {
                IMessageSession session;
                try
                {
                    session = await sessionClient.AcceptMessageSessionAsync("session", TimeSpan.FromMinutes(1));
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    continue;
                }

                var queue = new Queue <QueueMessage>();
                try
                {
                    await ReceiveMessagesAsync(session, queue, 10);

                    foreach (var message in new Queue <QueueMessage>(queue))
                    {
                        await ProcessMessage(message, expectedLockMessage);
                        await ConsumeComplete(session, queue, message.LockToken);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    await session.CloseAsync();
                }
            }
        }