コード例 #1
0
        static CorrelationQuery CreateDefaultCorrelationQuery(CorrelationQuery query, string action, CorrelationDataDescription data, ref bool shouldPreserveMessage)
        {
            MessageQuery messageQuery = new XPathMessageQuery
            {
                Expression = string.Format(CultureInfo.InvariantCulture, defaultQueryFormat, data.Name),
                Namespaces = new XPathMessageContext()
            };

            if (data.IsOptional)
            {
                messageQuery = new OptionalMessageQuery
                {
                    Query = messageQuery
                };
            }


            if (query == null)
            {
                MessageFilter filter;
                // verify if the data name is added by the context channel
                bool isContextQuery = (data.Name == contextCorrelationName);

                // if there is a query that is not a context query set it to true since we might read from
                // the message body
                if (!shouldPreserveMessage && !isContextQuery)
                {
                    shouldPreserveMessage = true;
                }
                // this is a server side query, we use an action filter
                if (action == MessageHeaders.WildcardAction)
                {
                    filter = new MatchAllMessageFilter();
                }
                else
                {
                    filter = new ActionMessageFilter(action);
                }

                return(new CorrelationQuery
                {
                    Where = filter,

                    IsDefaultContextQuery = isContextQuery,

                    Select = new MessageQuerySet
                    {
                        { data.Name, messageQuery }
                    }
                });
            }
            else
            {
                query.Select[data.Name] = messageQuery;
                return(query);
            }
        }
コード例 #2
0
        private static CorrelationQuery CreateDefaultCorrelationQuery(CorrelationQuery query, string action, CorrelationDataDescription data, ref bool shouldPreserveMessage)
        {
            XPathMessageQuery query5 = new XPathMessageQuery {
                Expression = string.Format(CultureInfo.InvariantCulture, "sm:correlation-data('{0}')", new object[] { data.Name }),
                Namespaces = new XPathMessageContext()
            };
            MessageQuery query2 = query5;

            if (data.IsOptional)
            {
                OptionalMessageQuery query3 = new OptionalMessageQuery {
                    Query = query2
                };
                query2 = query3;
            }
            if (query == null)
            {
                MessageFilter filter;
                bool          flag = data.Name == "wsc-instanceId";
                if (!shouldPreserveMessage && !flag)
                {
                    shouldPreserveMessage = true;
                }
                if (action == "*")
                {
                    filter = new MatchAllMessageFilter();
                }
                else
                {
                    filter = new ActionMessageFilter(new string[] { action });
                }
                CorrelationQuery query4 = new CorrelationQuery {
                    Where = filter,
                    IsDefaultContextQuery = flag
                };
                MessageQuerySet set = new MessageQuerySet();
                set.Add(data.Name, query2);
                query4.Select = set;
                return(query4);
            }
            query.Select[data.Name] = query2;
            return(query);
        }