Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / MessageFilter.cs / 1 / MessageFilter.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Dispatcher { using System; using System.ServiceModel.Channels; using System.ServiceModel; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Runtime.Serialization; using System.ServiceModel.Diagnostics; ////// Abstract base class for different classes of message filters /// [DataContract] [KnownType(typeof(XPathMessageFilter))] [KnownType(typeof(ActionMessageFilter))] [KnownType(typeof(MatchAllMessageFilter))] [KnownType(typeof(MatchNoneMessageFilter))] //[KnownType(typeof(EndpointAddressMessageFilter))] public abstract class MessageFilter { protected MessageFilter() { } protected internal virtual IMessageFilterTableCreateFilterTable () { return null; } /// /// Tests whether the filter matches the given message. /// public abstract bool Match(MessageBuffer buffer); ////// Tests whether the filter matches the given message without examining its body. /// Note: since this method never probes the message body, it should NOT close the message /// If the filter probes the message body, then the filter must THROW an Exception. The filter should not return false /// This is deliberate - we don't want to produce false positives. /// public abstract bool Match(Message message); } internal class SequentialMessageFilterTable: IMessageFilterTable { Dictionary filters; public SequentialMessageFilterTable() { this.filters = new Dictionary (); } // // IMessageFilterTable methods // public int Count { get { return this.filters.Count; } } public void Clear() { this.filters.Clear(); } public bool GetMatchingValue(Message message, out FilterData data) { bool dataSet = false; MessageFilter filter = null; data = default(FilterData); foreach(KeyValuePair item in this.filters) { if(item.Key.Match(message)) { if(dataSet) { Collection f = new Collection (); f.Add(filter); f.Add(item.Key); throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(SR.GetString(SR.FilterMultipleMatches), null, f), message); } filter = item.Key; data = item.Value; dataSet = true; } } return dataSet; } public bool GetMatchingValue(MessageBuffer buffer, out FilterData data) { bool dataSet = false; MessageFilter filter = null; data = default(FilterData); foreach(KeyValuePair item in this.filters) { if(item.Key.Match(buffer)) { if(dataSet) { Collection f = new Collection (); f.Add(filter); f.Add(item.Key); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MultipleFilterMatchesException(SR.GetString(SR.FilterMultipleMatches), null, f)); } filter = item.Key; data = item.Value; dataSet = true; } } return dataSet; } public bool GetMatchingValues(Message message, ICollection results) { int count = results.Count; foreach(KeyValuePair item in this.filters) { if(item.Key.Match(message)) { results.Add(item.Value); } } return count != results.Count; } public bool GetMatchingValues(MessageBuffer buffer, ICollection results) { int count = results.Count; foreach(KeyValuePair item in this.filters) { if(item.Key.Match(buffer)) { results.Add(item.Value); } } return count != results.Count; } public bool GetMatchingFilter(Message message, out MessageFilter filter) { filter = null; foreach(KeyValuePair item in this.filters) { if(item.Key.Match(message)) { if(filter != null) { Collection f = new Collection (); f.Add(filter); f.Add(item.Key); throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(SR.GetString(SR.FilterMultipleMatches), null, f), message); } filter = item.Key; } } return filter != null; } public bool GetMatchingFilter(MessageBuffer buffer, out MessageFilter filter) { filter = null; foreach(KeyValuePair item in this.filters) { if(item.Key.Match(buffer)) { if(filter != null) { Collection f = new Collection (); f.Add(filter); f.Add(item.Key); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MultipleFilterMatchesException(SR.GetString(SR.FilterMultipleMatches), null, f)); } filter = item.Key; } } return filter != null; } public bool GetMatchingFilters(Message message, ICollection results) { int count = results.Count; foreach(KeyValuePair item in this.filters) { if(item.Key.Match(message)) { results.Add(item.Key); } } return count != results.Count; } public bool GetMatchingFilters(MessageBuffer buffer, ICollection results) { int count = results.Count; foreach(KeyValuePair item in this.filters) { if(item.Key.Match(buffer)) { results.Add(item.Key); } } return count != results.Count; } // // IDictionary methods // public FilterData this[MessageFilter key] { get { return this.filters[key]; } set { this.filters[key] = value; } } public ICollection Keys { get { return this.filters.Keys; } } public ICollection Values { get { return this.filters.Values; } } public bool ContainsKey(MessageFilter key) { return this.filters.ContainsKey(key); } public void Add(MessageFilter key, FilterData value) { this.filters.Add(key, value); } public bool Remove(MessageFilter key) { return this.filters.Remove(key); } // // ICollection > methods // bool ICollection >.IsReadOnly { get { return false; } } void ICollection >.Add(KeyValuePair item) { ((ICollection >)this.filters).Add(item); } bool ICollection >.Contains(KeyValuePair item) { return ((ICollection >)this.filters).Contains(item); } void ICollection >.CopyTo(KeyValuePair [] array, int arrayIndex) { ((ICollection >)this.filters).CopyTo(array, arrayIndex); } bool ICollection >.Remove(KeyValuePair item) { return ((ICollection >)this.filters).Remove(item); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable >)this).GetEnumerator(); } IEnumerator > IEnumerable >.GetEnumerator() { return ((ICollection >)this.filters).GetEnumerator(); } public bool TryGetValue(MessageFilter filter, out FilterData data) { return this.filters.TryGetValue(filter, out data); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HttpProfileGroupBase.cs
- BooleanKeyFrameCollection.cs
- EmbeddedMailObjectCollectionEditor.cs
- __Error.cs
- PasswordTextNavigator.cs
- ITreeGenerator.cs
- XmlSignificantWhitespace.cs
- SqlDataSourceCustomCommandEditor.cs
- WebPartEditorOkVerb.cs
- RectangleHotSpot.cs
- CheckedPointers.cs
- GeneralTransform.cs
- MenuItem.cs
- EventManager.cs
- Line.cs
- CompilerState.cs
- Command.cs
- OutputCache.cs
- SimpleMailWebEventProvider.cs
- ListItemCollection.cs
- TypeDefinition.cs
- CompiledQueryCacheEntry.cs
- HostingPreferredMapPath.cs
- LinearGradientBrush.cs
- Point3DCollectionConverter.cs
- DataGridViewColumnHeaderCell.cs
- AssociationSetEnd.cs
- SettingsPropertyIsReadOnlyException.cs
- DataServiceResponse.cs
- ChangePassword.cs
- HealthMonitoringSectionHelper.cs
- DataSourceHelper.cs
- ObjectDataSourceView.cs
- PenLineJoinValidation.cs
- TypeSemantics.cs
- DataGridViewCellStateChangedEventArgs.cs
- TypedElement.cs
- PropertyDescriptor.cs
- ExceptionHandlerDesigner.cs
- AlphaSortedEnumConverter.cs
- MachineKeyConverter.cs
- FormViewPagerRow.cs
- ExclusiveNamedPipeTransportManager.cs
- IsolatedStorageFile.cs
- WrappedReader.cs
- ProviderConnectionPoint.cs
- SHA256Cng.cs
- ComponentChangedEvent.cs
- ToolboxCategory.cs
- GridViewColumnCollection.cs
- HtmlFormWrapper.cs
- ListDictionaryInternal.cs
- PasswordTextContainer.cs
- WindowsStatic.cs
- GetMemberBinder.cs
- WpfWebRequestHelper.cs
- XmlSerializableWriter.cs
- OleDbMetaDataFactory.cs
- SchemaType.cs
- ImageAutomationPeer.cs
- DocumentGridContextMenu.cs
- XPathParser.cs
- WindowsScrollBarBits.cs
- DisplayClaim.cs
- DBConnection.cs
- TablePattern.cs
- PersonalizationState.cs
- ExtendedPropertyDescriptor.cs
- CallbackValidatorAttribute.cs
- PageBorderless.cs
- MarshalByRefObject.cs
- NestedContainer.cs
- BindingValueChangedEventArgs.cs
- __Filters.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- PartialCachingAttribute.cs
- UpdateDelegates.Generated.cs
- MenuCommands.cs
- FileDialogPermission.cs
- SafeSecurityHelper.cs
- CardSpaceSelector.cs
- DynamicQueryableWrapper.cs
- ByteStorage.cs
- FileDialogCustomPlaces.cs
- FileSystemWatcher.cs
- SqlTrackingService.cs
- InternalUserCancelledException.cs
- FlatButtonAppearance.cs
- TraceRecord.cs
- QilCloneVisitor.cs
- AppDomain.cs
- HttpRequest.cs
- FullTextState.cs
- TagPrefixInfo.cs
- DispatchChannelSink.cs
- CallContext.cs
- SystemPens.cs
- SelfIssuedAuthAsymmetricKey.cs
- DiffuseMaterial.cs
- ParameterCollection.cs