private static async Task <long> ProcessNextMessagesWithSessionStateAsync(SubscriptionClient client, IMessageSession session, SessionStateManager session_state, ConsoleColor color) { int x = session_state.LastProcessedCount + 1; long seq2 = 0; while (true) { if (!session_state.DeferredList.TryGetValue(x, out seq2)) { break; } //------------------------------- var deferredMessage = await session.ReceiveDeferredMessageAsync(seq2); if (ProcessMessages(deferredMessage, color)) { await session.CompleteAsync(deferredMessage.SystemProperties.LockToken); if (deferredMessage.UserProperties["IsLast"].ToString().ToLower() == "true") { //end of the session await session.SetStateAsync(null); await session.CloseAsync(); } else { session_state.LastProcessedCount = ((int)deferredMessage.UserProperties["Order"]); session_state.DeferredList.Remove(x); await session.SetStateAsync(Serialize <SessionStateManager>(session_state)); } } else { await client.DeadLetterAsync(deferredMessage.SystemProperties.LockToken, "Message is of the wrong type or could not be processed", "Cannot deserialize this message as the type is unknown."); session_state.DeferredList.Remove(x); await session.SetStateAsync(Serialize <SessionStateManager>(session_state)); } //------------------------------ x++; } return(seq2); }
private static async Task <long> ProcessNextMessagesWithSessionStateAsync(SubscriptionClient client, IMessageSession session, SessionStateManager session_state, int EndOfSessionCount, ConsoleColor color) { int x = session_state.LastProcessedCount + 1; long seq2 = 0; if (session_state.DeferredList.TryGetValue(x, out long seq1)) { while (true) { if (!session_state.DeferredList.TryGetValue(x, out seq2)) { break; } //------------------------------- var deferredMessage = await session.ReceiveDeferredMessageAsync(seq2); if (ProcessMessages(deferredMessage, Color.White)) { await session.CompleteAsync(deferredMessage.SystemProperties.LockToken); session_state.LastProcessedCount = ((int)deferredMessage.UserProperties["Count"]); session_state.DeferredList.Remove(x); await session.SetStateAsync(Utils.Serialize <SessionStateManager>(session_state)); } else { await client.DeadLetterAsync(deferredMessage.SystemProperties.LockToken, "Message is of the wrong type", "Cannot deserialize this message as the type in the Label prop is unknown."); session_state.DeferredList.Remove(x); await session.SetStateAsync(Utils.Serialize <SessionStateManager>(session_state)); } //------------------------------ x++; } } return(seq2); }
/// <inheritdoc/> public async Task SetWorkflowStateAsync(IMessageSession session, SessionWorkflowState state) { byte[] bytes = null; if (state != null) { var json = JsonConvert.SerializeObject(state); bytes = Encoding.UTF8.GetBytes(json); } await session.SetStateAsync(bytes); }
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(); } }
public Task SetStateAsync(byte[] sessionState) { return _session.SetStateAsync(sessionState); }
/// <inheritdoc/> public async Task <SessionWorkflowState> ResetWorkflowStateAsync(IMessageSession session) { await session.SetStateAsync(null); return(new SessionWorkflowState()); }