Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / ActionMessageFilterTable.cs / 1 / ActionMessageFilterTable.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Dispatcher { using System; using System.ServiceModel.Channels; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ServiceModel.Diagnostics; using System.Runtime.Serialization; [DataContract] internal class ActionMessageFilterTable: IMessageFilterTable { Dictionary filters; Dictionary > actions; List always; public ActionMessageFilterTable() { Init(); } void Init() { this.filters = new Dictionary (); this.actions = new Dictionary >(); this.always = new List (); } public TFilterData this[MessageFilter filter] { get { return this.filters[filter]; } set { if(this.filters.ContainsKey(filter)) { this.filters[filter] = value; } else { this.Add(filter, value); } } } public int Count { get { return this.filters.Count; } } [DataMember(IsRequired = true)] Entry[] Entries { get { Entry[] entries = new Entry[Count]; int i = 0; foreach (KeyValuePair item in filters) entries[i++] = new Entry(item.Key, item.Value); return entries; } set { Init(); for(int i = 0; i < value.Length; ++i) Add(value[i].filter, value[i].data); } } public bool IsReadOnly { get { return false; } } public ICollection Keys { get { return this.filters.Keys; } } public ICollection Values { get { return this.filters.Values; } } public void Add(ActionMessageFilter filter, TFilterData data) { if(filter == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter"); } this.filters.Add(filter, data); List filters; #pragma warning suppress 56506 // [....], Actions will never be null if(filter.Actions.Count == 0) { this.always.Add(filter); } else { for(int i = 0; i < filter.Actions.Count; ++i) { if(!this.actions.TryGetValue(filter.Actions[i], out filters)) { filters = new List (); this.actions.Add(filter.Actions[i], filters); } filters.Add(filter); } } } public void Add(MessageFilter filter, TFilterData data) { if(filter == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter"); } Add((ActionMessageFilter)filter, data); } public void Add(KeyValuePair item) { Add(item.Key, item.Value); } public void Clear() { this.filters.Clear(); this.actions.Clear(); this.always.Clear(); } public bool Contains(KeyValuePair item) { return ((ICollection >)this.filters).Contains(item); } public bool ContainsKey(MessageFilter filter) { return this.filters.ContainsKey(filter); } public void CopyTo(KeyValuePair [] array, int arrayIndex) { ((ICollection >)this.filters).CopyTo(array, arrayIndex); } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } public IEnumerator > GetEnumerator() { return ((ICollection >)this.filters).GetEnumerator(); } MessageFilter InnerMatch(Message message) { string act = message.Headers.Action; if(act == null) { act = string.Empty; } List filters; if(this.actions.TryGetValue(act, out filters)) { if(this.always.Count + filters.Count > 1) { List tmp = new List (filters); tmp.AddRange(this.always); Collection matches = new Collection (tmp); throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(SR.GetString(SR.FilterMultipleMatches), null, matches), message); } return filters[0]; } if(this.always.Count > 1) { Collection matches = new Collection (new List (this.always)); throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(SR.GetString(SR.FilterMultipleMatches), null, matches), message); } else if(this.always.Count == 1) { return this.always[0]; } return null; } void InnerMatch(Message message, ICollection results) { for(int i = 0; i < this.always.Count; ++i) { results.Add(this.always[i]); } string act = message.Headers.Action; if(act == null) { act = string.Empty; } List filters; if(this.actions.TryGetValue(act, out filters)) { for(int i = 0; i < filters.Count; ++i) { results.Add(filters[i]); } } } void InnerMatchData(Message message, ICollection results) { for(int i = 0; i < this.always.Count; ++i) { results.Add(this.filters[this.always[i]]); } string act = message.Headers.Action; if(act == null) { act = string.Empty; } List filters; if(this.actions.TryGetValue(act, out filters)) { for(int i = 0; i < filters.Count; ++i) { results.Add(this.filters[filters[i]]); } } } public bool GetMatchingValue(Message message, out TFilterData data) { if (message == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message"); } MessageFilter f = InnerMatch(message); if(f == null) { data = default(TFilterData); return false; } data = this.filters[f]; return true; } public bool GetMatchingValue(MessageBuffer messageBuffer, out TFilterData data) { if (messageBuffer == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("messageBuffer"); } MessageFilter f = null; Message msg = messageBuffer.CreateMessage(); try { f = InnerMatch(msg); } finally { msg.Close(); } if(f == null) { data = default(TFilterData); return false; } data = this.filters[f]; return true; } public bool GetMatchingFilter(Message message, out MessageFilter filter) { if (message == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message"); } filter = InnerMatch(message); return filter != null; } public bool GetMatchingFilter(MessageBuffer messageBuffer, out MessageFilter filter) { if (messageBuffer == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("messageBuffer"); } Message msg = messageBuffer.CreateMessage(); try { filter = InnerMatch(msg); return filter != null; } finally { msg.Close(); } } public bool GetMatchingFilters(Message message, ICollection results) { if (message == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message"); } if (results == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("results"); } int count = results.Count; InnerMatch(message, results); return count != results.Count; } public bool GetMatchingFilters(MessageBuffer messageBuffer, ICollection results) { if (messageBuffer == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("messageBuffer"); } if (results == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("results"); } Message msg = messageBuffer.CreateMessage(); try { int count = results.Count; InnerMatch(msg, results); return count != results.Count; } finally { msg.Close(); } } public bool GetMatchingValues(Message message, ICollection results) { if (message == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message"); } if (results == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("results"); } int count = results.Count; InnerMatchData(message, results); return count != results.Count; } public bool GetMatchingValues(MessageBuffer messageBuffer, ICollection results) { if (messageBuffer == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("messageBuffer"); } if (results == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("results"); } Message msg = messageBuffer.CreateMessage(); try { int count = results.Count; InnerMatchData(msg, results); return count != results.Count; } finally { msg.Close(); } } public bool Remove(ActionMessageFilter filter) { if(filter == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter"); } if(this.filters.Remove(filter)) { #pragma warning suppress 56506 // [....], ActionMessageFilter.Actions can never be null if(filter.Actions.Count == 0) { this.always.Remove(filter); } else { List filters; for(int i = 0; i < filter.Actions.Count; ++i) { #pragma warning suppress 56506 // [....], PreSharp generates a false error here filters = this.actions[filter.Actions[i]]; #pragma warning suppress 56506 // [....], filters can never be null if(filters.Count == 1) { this.actions.Remove(filter.Actions[i]); } else { filters.Remove(filter); } } } return true; } return false; } public bool Remove(MessageFilter filter) { if(filter == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter"); } ActionMessageFilter aFilter = filter as ActionMessageFilter; if(aFilter != null) { return Remove(aFilter); } return false; } public bool Remove(KeyValuePair item) { if(((ICollection >)this.filters).Contains(item)) { return Remove(item.Key); } return false; } public bool TryGetValue(MessageFilter filter, out TFilterData data) { return this.filters.TryGetValue(filter, out data); } [DataContract] class Entry { [DataMember(IsRequired = true)] internal MessageFilter filter; [DataMember(IsRequired = true)] internal TFilterData data; internal Entry(MessageFilter f, TFilterData d) { filter = f; data = d; } } } } // 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
- ConversionValidationRule.cs
- BitmapEffectDrawing.cs
- ReceiveReply.cs
- ChildDocumentBlock.cs
- BinaryMessageFormatter.cs
- SqlNodeAnnotations.cs
- SqlCacheDependencySection.cs
- PlatformCulture.cs
- ZipIOModeEnforcingStream.cs
- COM2ExtendedUITypeEditor.cs
- DataServiceClientException.cs
- Odbc32.cs
- DateTimeUtil.cs
- WebPartActionVerb.cs
- EventLog.cs
- WinInet.cs
- ContextBase.cs
- XmlMembersMapping.cs
- StateBag.cs
- SafeMarshalContext.cs
- DataServiceEntityAttribute.cs
- TreeNodeStyle.cs
- CodeDomSerializer.cs
- TabControl.cs
- Baml2006ReaderSettings.cs
- CompilationUtil.cs
- NotSupportedException.cs
- ToolTip.cs
- HtmlLink.cs
- PropertyChangingEventArgs.cs
- PanelDesigner.cs
- DataGridTextBoxColumn.cs
- AutomationAttributeInfo.cs
- ToolStripItemEventArgs.cs
- DrawTreeNodeEventArgs.cs
- LineGeometry.cs
- UpdatePanelTrigger.cs
- Camera.cs
- DataListItem.cs
- SafeArrayRankMismatchException.cs
- SharedConnectionWorkflowTransactionService.cs
- IProvider.cs
- TextParaClient.cs
- ConfigViewGenerator.cs
- DrawListViewColumnHeaderEventArgs.cs
- columnmapkeybuilder.cs
- ServiceModelConfigurationSection.cs
- BindingCompleteEventArgs.cs
- DBCommandBuilder.cs
- ClientCredentialsSecurityTokenManager.cs
- XmlSerializationReader.cs
- UnsupportedPolicyOptionsException.cs
- SQLDateTime.cs
- TextParagraphCache.cs
- SiteMapDataSourceView.cs
- CryptoConfig.cs
- x509utils.cs
- HwndAppCommandInputProvider.cs
- RangeBaseAutomationPeer.cs
- PropertyMappingExceptionEventArgs.cs
- ProcessModuleCollection.cs
- UriScheme.cs
- RuntimeConfig.cs
- TextBoxBase.cs
- PagedDataSource.cs
- PageFunction.cs
- SafeFileMapViewHandle.cs
- EnvelopedPkcs7.cs
- SchemaConstraints.cs
- WorkflowExecutor.cs
- CommandLibraryHelper.cs
- DetailsViewModeEventArgs.cs
- HttpServerVarsCollection.cs
- TdsParameterSetter.cs
- OdbcDataAdapter.cs
- DiscoveryClientElement.cs
- LayoutDump.cs
- FontFamilyConverter.cs
- RecordConverter.cs
- SqlTypeSystemProvider.cs
- WhiteSpaceTrimStringConverter.cs
- EraserBehavior.cs
- MemoryRecordBuffer.cs
- XmlSchema.cs
- GroupByQueryOperator.cs
- DbParameterCollectionHelper.cs
- FileUpload.cs
- VarRemapper.cs
- FileDialog.cs
- ProviderUtil.cs
- Oid.cs
- FormsAuthenticationTicket.cs
- DictionaryBase.cs
- StringSorter.cs
- CodeVariableReferenceExpression.cs
- TemplateControlParser.cs
- WindowsStartMenu.cs
- GeometryModel3D.cs
- AnnotationHighlightLayer.cs
- AppDomainManager.cs