示例#1
0
 public PublishRequest(Type contract, string action, object message, MessageDeliveryContext context)
     : this()
 {
     ContractType = contract;
     Action = action;
     Message = message;
     Context = context;
 }
 public MessageDelivery(string messageId, Guid subscriptionEndpointId, Type contractType, string action, object message, int maxRetries, int retryCount, DateTime? timeToProcess, MessageDeliveryContext context, DateTime mustDeliverBy)
 {
     MessageDeliveryId = messageId;
     SubscriptionEndpointId = subscriptionEndpointId;
     Action = action;
     Message = message;
     RetryCount = retryCount;
     TimeToProcess = timeToProcess;
     MaxRetries = maxRetries;
     Context = context;
     ContractType = contractType;
     MustDeliverBy = mustDeliverBy;
 }
        public override void Dispatch(MessageDelivery messageDelivery)
        {
            MessageDeliveryContext context = messageDelivery.Context;

            Dictionary <MessageDeliveryContextKey, object> newContext = context.ToDictionary();

            TransformationList oldTransformedByList = new TransformationList();

            if (context.ContainsKey(TransformedByKeyName))
            {
                oldTransformedByList = (TransformationList)context[TransformedByKeyName];
            }

            // Don't transform this message more than once
            if (!oldTransformedByList.Contains(Endpoint.Id.ToString()) || AllowMultipleTransforms)
            {
                if (oldTransformedByList.Count() > 0)
                {
                    List <string> list = new List <string>(oldTransformedByList);
                    list.Add(Endpoint.Id.ToString());
                    newContext[TransformedByKeyName] = new TransformationList(list);
                }
                else
                {
                    List <string> list = new List <string>();
                    list.Add(Endpoint.Id.ToString());
                    newContext[TransformedByKeyName] = new TransformationList();
                }

                context = new MessageDeliveryContext(newContext);

                PublishRequest result = Transform(new PublishRequest(Endpoint.ContractType, messageDelivery.Action, messageDelivery.Message, context));
                if (result != null)
                {
                    Runtime.PublishOneWay(new PublishRequest(result.ContractType, result.Action, result.Message, context));
                }
            }
            else
            {
                System.Diagnostics.Trace.TraceInformation("Skipping already transformed message (" + messageDelivery.MessageDeliveryId + ")");
            }
        }
        public virtual MessageDelivery ToMessageDelivery(Message msg)
        {
            MessageDeliveryContext context = msg.Headers.GetHeader <MessageDeliveryContext>(ContextHeader, MessagingNamespace);
            object value = GetMessageObject(msg);

            int      maxRetries     = msg.Headers.GetHeader <int>(MaxRetriesHeader, MessagingNamespace);
            int      retryCount     = msg.Headers.GetHeader <int>(RetryCountHeader, MessagingNamespace);
            string   messageId      = msg.Headers.GetHeader <string>(MessageIdHeader, MessagingNamespace);
            Guid     subscriptionId = msg.Headers.GetHeader <Guid>(SubscriptionIdHeader, MessagingNamespace);
            DateTime?timeToProcess  = null;

            if (msg.Headers.FindHeader(TimeToProcessHeader, MessagingNamespace) != -1)
            {
                timeToProcess = msg.Headers.GetHeader <DateTime>(TimeToProcessHeader, MessagingNamespace);
            }
            string          contractTypeName = msg.Headers.GetHeader <string>(ContractTypeNameHeader, MessagingNamespace);
            DateTime        mustDeliverBy    = msg.Headers.GetHeader <DateTime>(MustDeliverByHeader, MessagingNamespace);
            MessageDelivery delivery         = new MessageDelivery(messageId, subscriptionId, contractTypeName == null ? null : Type.GetType(contractTypeName), msg.Headers.Action, value, maxRetries, retryCount, timeToProcess, new MessageDeliveryContext(context), mustDeliverBy);

            return(delivery);
        }
 public MessageDelivery(Guid subscriptionEndpointId, Type contractType, string action, object message, int maxRetries, MessageDeliveryContext context)
     : this(Guid.NewGuid().ToString(), subscriptionEndpointId, contractType, action, message, maxRetries, 0, null, context, DateTime.MaxValue)
 {
 }