public HostCompensateContext(HostInfo host, ConsumeContext <RoutingSlip> context)
            : base(new PayloadCacheScope(context), context.CancellationToken)
        {
            _host    = host;
            _context = context;

            _timer          = Stopwatch.StartNew();
            _startTimestamp = DateTime.UtcNow;

            _routingSlip = new SanitizedRoutingSlip(context);
            if (_routingSlip.CompensateLogs.Count == 0)
            {
                throw new ArgumentException("The routingSlip must contain at least one activity log");
            }

            _compensateLog = _routingSlip.CompensateLogs.Last();

            _activityLog = _routingSlip.ActivityLogs.SingleOrDefault(x => x.ExecutionId == _compensateLog.ExecutionId);
            if (_activityLog == null)
            {
                throw new RoutingSlipException("The compensation log did not have a matching activity log entry: "
                                               + _compensateLog.ExecutionId);
            }

            _data = _routingSlip.GetCompensateLogData <TLog>();

            _publisher = new RoutingSlipEventPublisher(this, _routingSlip);
        }
        public HostCompensation(IConsumeContext <RoutingSlip> context)
        {
            _context = context;

            _routingSlip = new SanitizedRoutingSlip(context);
            if (_routingSlip.ActivityLogs.Count == 0)
            {
                throw new ArgumentException("The routingSlip must contain at least one activity log");
            }

            _activityLog = _routingSlip.ActivityLogs.Last();
            _log         = _routingSlip.GetActivityLog <TLog>();
        }
示例#3
0
        public HostExecution(IConsumeContext <RoutingSlip> context, Uri compensationAddress)
        {
            _context             = context;
            _compensationAddress = compensationAddress;

            _routingSlip = new SanitizedRoutingSlip(context);
            if (_routingSlip.Itinerary.Count == 0)
            {
                throw new ArgumentException("The routingSlip must contain at least one activity");
            }

            _activityTrackingNumber = NewId.NextGuid();

            _activity  = _routingSlip.Itinerary[0];
            _arguments = _routingSlip.GetActivityArguments <TArguments>();
        }
示例#4
0
        public HostExecuteContext(HostInfo host, Uri compensationAddress, ConsumeContext <RoutingSlip> context)
        {
            _host = host;
            _compensationAddress = compensationAddress;
            _context             = context;

            _timer = Stopwatch.StartNew();
            NewId newId = NewId.Next();

            _executionId = newId.ToGuid();
            _timestamp   = newId.Timestamp;

            _routingSlip = new SanitizedRoutingSlip(context);
            if (_routingSlip.Itinerary.Count == 0)
            {
                throw new ArgumentException("The routingSlip must contain at least one activity");
            }

            _activity  = _routingSlip.Itinerary[0];
            _arguments = _routingSlip.GetActivityArguments <TArguments>();

            _publisher = new RoutingSlipEventPublisher(this, _routingSlip);
        }