public async Task AppendMessageAsync(ITransaction transaction, TaskMessageItem newMessage)
        {
            await EnsureStoreInitialized();

            var sessionMessageProvider = await GetOrAddSessionMessagesInstance(newMessage.TaskMessage.OrchestrationInstance);

            await sessionMessageProvider.SendBeginAsync(transaction, new Message <Guid, TaskMessageItem>(Guid.NewGuid(), newMessage));

            await this.Store.TryAddAsync(transaction, newMessage.TaskMessage.OrchestrationInstance.InstanceId, PersistentSession.Create(newMessage.TaskMessage.OrchestrationInstance));
        }
        public async Task <bool> TryAppendMessageAsync(ITransaction transaction, TaskMessageItem newMessage)
        {
            if (await this.Store.ContainsKeyAsync(transaction, newMessage.TaskMessage.OrchestrationInstance.InstanceId))
            {
                var sessionMessageProvider = await GetOrAddSessionMessagesInstance(newMessage.TaskMessage.OrchestrationInstance);

                await sessionMessageProvider.SendBeginAsync(transaction, new Message <Guid, TaskMessageItem>(Guid.NewGuid(), newMessage));

                return(true);
            }

            return(false);
        }
        public async Task AppendMessageAsync(TaskMessageItem newMessage)
        {
            await RetryHelper.ExecuteWithRetryOnTransient(async() =>
            {
                using (var txn = this.StateManager.CreateTransaction())
                {
                    await this.AppendMessageAsync(txn, newMessage);
                    await txn.CommitAsync();
                }
            }, uniqueActionIdentifier : $"Orchestration = '{newMessage.TaskMessage.OrchestrationInstance}', Action = '{nameof(SessionProvider)}.{nameof(AppendMessageAsync)}'");

            this.TryEnqueueSession(newMessage.TaskMessage.OrchestrationInstance);
        }
Esempio n. 4
0
        public void TaskMessageItem_SerializationTests()
        {
            var expected = new TaskMessageItem(new TaskMessage()
            {
                OrchestrationInstance = new OrchestrationInstance()
                {
                    InstanceId = "InstanceId", ExecutionId = "ExecutionId"
                },
                SequenceNumber = 33,
                Event          = new TaskScheduledEvent(-1)
            });

            var actual = Measure.DataContractSerialization(expected);

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.TaskMessage.OrchestrationInstance.InstanceId, actual.TaskMessage.OrchestrationInstance.InstanceId);
            Assert.AreEqual(expected.TaskMessage.OrchestrationInstance.ExecutionId, actual.TaskMessage.OrchestrationInstance.ExecutionId);
            Assert.AreEqual(expected.TaskMessage.SequenceNumber, actual.TaskMessage.SequenceNumber);
            Assert.AreEqual(expected.TaskMessage.Event.EventId, actual.TaskMessage.Event.EventId);
        }