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) { }