void AddCorrelationQueryBehaviorToServiceEndpoint(ServiceEndpoint serviceEndpoint) { Fx.Assert(serviceEndpoint != null, "Argument cannot be null!"); Fx.Assert(serviceEndpoint.Contract != null, "ServiceEndpoint must have a contract!"); Fx.Assert(this.serviceDefinition != null, "Missing WorkflowService!"); Fx.Assert(!serviceEndpoint.Behaviors.Contains(correlationQueryBehaviorType), "ServiceEndpoint should not have CorrelationQueryBehavior before this point!"); XName endpointContractName = XName.Get(serviceEndpoint.Contract.Name, serviceEndpoint.Contract.Namespace); Collection <CorrelationQuery> queries; if (this.correlationQueries != null && this.correlationQueries.TryGetValue(endpointContractName, out queries)) { // Filter out duplicate CorrelationQueries in the collection. // Currently, we only do reference comparison and Where message filter comparison. Collection <CorrelationQuery> uniqueQueries = new Collection <CorrelationQuery>(); foreach (CorrelationQuery correlationQuery in queries) { if (!uniqueQueries.Contains(correlationQuery)) { uniqueQueries.Add(correlationQuery); } else { if (TD.DuplicateCorrelationQueryIsEnabled()) { TD.DuplicateCorrelationQuery(correlationQuery.Where.ToString()); } } } serviceEndpoint.Behaviors.Add(new CorrelationQueryBehavior(uniqueQueries) { ServiceContractName = endpointContractName }); } else if (CorrelationQueryBehavior.BindingHasDefaultQueries(serviceEndpoint.Binding)) { if (!serviceEndpoint.Behaviors.Contains(typeof(CorrelationQueryBehavior))) { serviceEndpoint.Behaviors.Add(new CorrelationQueryBehavior(new Collection <CorrelationQuery>()) { ServiceContractName = endpointContractName }); } } }