public void Add(PrefixEndpointAddressMessageFilter filter, TFilterData data)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }

            this.filters.Add(filter, data);

            // Create the candidate
            byte[]    mask = BuildMask(filter.HeaderLookup);
            Candidate can  = new Candidate(filter, data, mask, filter.HeaderLookup);

            this.candidates.Add(filter, can);

#pragma warning suppress 56506 // [....], PrefixEndpointAddressMessageFilter.Address can never be null
            Uri soapToAddress = filter.Address.Uri;

            CandidateSet cset;
            if (!TryMatchCandidateSet(soapToAddress, filter.IncludeHostNameInComparison, out cset))
            {
                cset = new CandidateSet();
                GetAddressTable(filter.IncludeHostNameInComparison).RegisterUri(soapToAddress, GetComparisonMode(filter.IncludeHostNameInComparison), cset);
            }
            cset.candidates.Add(can);

            IncrementQNameCount(cset, filter.Address);
        }
示例#2
0
        public bool Remove(PrefixEndpointAddressMessageFilter filter)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }
            if (!base.filters.Remove(filter))
            {
                return(false);
            }
            EndpointAddressMessageFilterTable <TFilterData> .Candidate item = base.candidates[filter];
            Uri to = filter.Address.Uri;

            EndpointAddressMessageFilterTable <TFilterData> .CandidateSet cset = null;
            if (this.TryMatchCandidateSet(to, filter.IncludeHostNameInComparison, out cset))
            {
                if (cset.candidates.Count == 1)
                {
                    this.GetAddressTable(filter.IncludeHostNameInComparison).UnregisterUri(to, this.GetComparisonMode(filter.IncludeHostNameInComparison));
                }
                else
                {
                    base.DecrementQNameCount(cset, filter.Address);
                    cset.candidates.Remove(item);
                }
            }
            base.candidates.Remove(filter);
            base.RebuildMasks();
            return(true);
        }
示例#3
0
        public override bool Remove(MessageFilter filter)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }
            PrefixEndpointAddressMessageFilter filter2 = filter as PrefixEndpointAddressMessageFilter;

            return((filter2 != null) && this.Remove(filter2));
        }
        public override bool Remove(MessageFilter filter)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }

            PrefixEndpointAddressMessageFilter pFilter = filter as PrefixEndpointAddressMessageFilter;

            if (pFilter != null)
            {
                return(Remove(pFilter));
            }

            return(false);
        }
示例#5
0
        public void Add(PrefixEndpointAddressMessageFilter filter, TFilterData data)
        {
            EndpointAddressMessageFilterTable <TFilterData> .CandidateSet set;
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }
            base.filters.Add(filter, data);
            byte[] mask = base.BuildMask(filter.HeaderLookup);
            EndpointAddressMessageFilterTable <TFilterData> .Candidate candidate = new EndpointAddressMessageFilterTable <TFilterData> .Candidate(filter, data, mask, filter.HeaderLookup);

            base.candidates.Add(filter, candidate);
            Uri to = filter.Address.Uri;

            if (!this.TryMatchCandidateSet(to, filter.IncludeHostNameInComparison, out set))
            {
                set = new EndpointAddressMessageFilterTable <TFilterData> .CandidateSet();

                this.GetAddressTable(filter.IncludeHostNameInComparison).RegisterUri(to, this.GetComparisonMode(filter.IncludeHostNameInComparison), set);
            }
            set.candidates.Add(candidate);
            base.IncrementQNameCount(set, filter.Address);
        }
        public bool Remove(PrefixEndpointAddressMessageFilter filter)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }

            if (!this.filters.Remove(filter))
            {
                return(false);
            }

            Candidate can = this.candidates[filter];

#pragma warning suppress 56506 // [....], PrefixEndpointAddressMessageFilter.Address can never be null
            Uri soapToAddress = filter.Address.Uri;

            CandidateSet cset = null;
            if (TryMatchCandidateSet(soapToAddress, filter.IncludeHostNameInComparison, out cset))
            {
                if (cset.candidates.Count == 1)
                {
                    GetAddressTable(filter.IncludeHostNameInComparison).UnregisterUri(soapToAddress, GetComparisonMode(filter.IncludeHostNameInComparison));
                }
                else
                {
                    DecrementQNameCount(cset, filter.Address);

                    // Remove Candidate
                    cset.candidates.Remove(can);
                }
            }
            this.candidates.Remove(filter);

            RebuildMasks();
            return(true);
        }