コード例 #1
0
        async Task <TSaga> ReadSagaState(MessageSessionContext context)
        {
            byte[] state = await context.GetStateAsync().ConfigureAwait(false);

            if (state == null)
            {
                return(default);
コード例 #2
0
        public MessageSessionSagaConsumeContext(ConsumeContext <TMessage> context, MessageSessionContext sessionContext, TSaga instance)
            : base(context)
        {
            _sessionContext = sessionContext;

            Saga = instance;
        }
コード例 #3
0
 async Task <TSaga> ReadSagaState(MessageSessionContext context)
 {
     try
     {
         using (var stateStream = await context.GetStateAsync().ConfigureAwait(false))
         {
             if (stateStream == null || stateStream.Length == 0)
             {
                 return(default);
コード例 #4
0
        public MessageSessionSagaRepositoryContext(ConsumeContext <TMessage> consumeContext, ISagaConsumeContextFactory <MessageSessionContext, TSaga> factory)
            : base(consumeContext)
        {
            if (!consumeContext.TryGetPayload(out MessageSessionContext sessionContext))
            {
                throw new SagaException($"The session-based saga repository requires an active message session: {TypeMetadataCache<TSaga>.ShortName}",
                                        typeof(TSaga), typeof(TMessage));
            }

            _consumeContext = consumeContext;
            _sessionContext = sessionContext;
            _factory        = factory;
        }
コード例 #5
0
        /// <summary>
        /// Writes the saga state to the message session
        /// </summary>
        /// <param name="context">The message session context</param>
        /// <param name="saga">The saga state</param>
        /// <returns>An awaitable task, of course</returns>
        async Task WriteSagaState(MessageSessionContext context, TSaga saga)
        {
            using (var serializeStream = new MemoryStream())
                using (var writer = new StreamWriter(serializeStream, Encoding.UTF8, 1024, true))
                    using (var bsonWriter = new JsonTextWriter(writer))
                    {
                        JsonMessageSerializer.Serializer.Serialize(bsonWriter, saga);

                        bsonWriter.Flush();
                        await serializeStream.FlushAsync().ConfigureAwait(false);

                        await context.SetStateAsync(serializeStream.ToArray()).ConfigureAwait(false);
                    }
        }
コード例 #6
0
        /// <summary>
        /// Writes the saga state to the message session
        /// </summary>
        /// <param name="context">The message session context</param>
        /// <param name="saga">The saga state</param>
        /// <returns>An awaitable task, of course</returns>
        async Task WriteSagaState(MessageSessionContext context, TSaga saga)
        {
            using (var serializeStream = new MemoryStream())
                using (var bsonWriter = new BsonWriter(serializeStream))
                {
                    BsonMessageSerializer.Serializer.Serialize(bsonWriter, saga);

                    bsonWriter.Flush();
                    await serializeStream.FlushAsync().ConfigureAwait(false);

                    using (var stateStream = new MemoryStream(serializeStream.ToArray(), false))
                    {
                        await context.SetStateAsync(stateStream).ConfigureAwait(false);
                    }
                }
        }
コード例 #7
0
        async Task <TSaga> ReadSagaState(MessageSessionContext context)
        {
            try
            {
                using (var stateStream = await context.GetStateAsync().ConfigureAwait(false))
                {
                    if (stateStream == null || stateStream.Length == 0)
                    {
                        return(default(TSaga));
                    }

                    using (var bsonReader = new BsonReader(stateStream))
                    {
                        return(BsonMessageSerializer.Deserializer.Deserialize <TSaga>(bsonReader));
                    }
                }
            }
            catch (NotImplementedException exception)
            {
                throw new ConfigurationException("NetMessaging must be used for session-based sagas", exception);
            }
        }