Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / HttpTransportManager.cs / 1 / HttpTransportManager.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.ServiceModel; abstract class HttpTransportManager : TransportManager, ITransportManagerRegistration { Dictionary> addressTables; HostNameComparisonMode hostNameComparisonMode; Uri listenUri; string realm; internal HttpTransportManager() { this.addressTables = new Dictionary >(); } internal HttpTransportManager(Uri listenUri, HostNameComparisonMode hostNameComparisonMode, string realm) : this() { this.hostNameComparisonMode = hostNameComparisonMode; this.listenUri = listenUri; this.realm = realm; } internal string Realm { get { return this.realm; } } public HostNameComparisonMode HostNameComparisonMode { get { return this.hostNameComparisonMode; } protected set { // used by HostedHttpTransportManager lock (base.ThisLock) { ThrowIfOpen(); this.hostNameComparisonMode = value; } } } internal override string Scheme { get { return Uri.UriSchemeHttp; } } internal virtual UriPrefixTable TransportManagerTable { get { return HttpChannelListener.StaticTransportManagerTable; } } public Uri ListenUri { get { return this.listenUri; } protected set { this.listenUri = value; } } protected void Fault(Exception exception) { lock (ThisLock) { foreach (KeyValuePair > pair in this.addressTables) { this.Fault(pair.Value, exception); } } } internal virtual bool IsCompatible(HttpChannelListener listener) { return ( (this.hostNameComparisonMode == listener.HostNameComparisonMode) && (this.realm == listener.Realm) ); } internal override void OnClose() { this.TransportManagerTable.UnregisterUri(this.ListenUri, this.HostNameComparisonMode); } protected bool TryLookupUri(Uri requestUri, string requestMethod, HostNameComparisonMode hostNameComparisonMode, out HttpChannelListener listener) { listener = null; if (requestMethod == null) { requestMethod = string.Empty; } lock (addressTables) { UriPrefixTable addressTable; // check for a method match if necessary HttpChannelListener methodListener = null; if (requestMethod.Length > 0) { if (addressTables.TryGetValue(requestMethod, out addressTable)) { if (addressTable.TryLookupUri(requestUri, hostNameComparisonMode, out methodListener) && string.Compare(requestUri.AbsolutePath, methodListener.Uri.AbsolutePath, StringComparison.OrdinalIgnoreCase) != 0) { methodListener = null; } } } // and also check the wildcard bucket if (addressTables.TryGetValue(string.Empty, out addressTable) && addressTable.TryLookupUri(requestUri, hostNameComparisonMode, out listener)) { if (methodListener != null && methodListener.Uri.AbsoluteUri.Length >= listener.Uri.AbsoluteUri.Length) { listener = methodListener; } } else { listener = methodListener; } } return (listener != null); } internal override void Register(TransportChannelListener channelListener) { UriPrefixTable addressTable; lock (addressTables) { string method = ((HttpChannelListener)channelListener).Method; if (!addressTables.TryGetValue(method, out addressTable)) { addressTable = new UriPrefixTable (); addressTables[method] = addressTable; } } addressTable.RegisterUri(channelListener.Uri, channelListener.InheritBaseAddressSettings ? hostNameComparisonMode : channelListener.HostNameComparisonModeInternal, (HttpChannelListener)channelListener); } IList ITransportManagerRegistration.Select(TransportChannelListener channelListener) { IList result = null; if (this.IsCompatible((HttpChannelListener)channelListener)) { result = new List (); result.Add(this); } return result; } internal override void Unregister(TransportChannelListener channelListener) { UriPrefixTable addressTable; lock (addressTables) { string method = ((HttpChannelListener)channelListener).Method; if (!addressTables.TryGetValue(method, out addressTable)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString( SR.ListenerFactoryNotRegistered, channelListener.Uri))); } } HostNameComparisonMode registeredMode = channelListener.InheritBaseAddressSettings ? hostNameComparisonMode : channelListener.HostNameComparisonModeInternal; EnsureRegistered(addressTable, (HttpChannelListener)channelListener, registeredMode); addressTable.UnregisterUri(channelListener.Uri, registeredMode); } } } // 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
- ProviderManager.cs
- XmlDocumentSchema.cs
- DbConnectionStringBuilder.cs
- MenuBase.cs
- OleDbConnectionInternal.cs
- WindowsUpDown.cs
- MenuItem.cs
- IteratorFilter.cs
- MessageDirection.cs
- LocalBuilder.cs
- unitconverter.cs
- RouteValueExpressionBuilder.cs
- XslCompiledTransform.cs
- XComponentModel.cs
- FixedSOMGroup.cs
- TypeViewSchema.cs
- BindingNavigator.cs
- WinCategoryAttribute.cs
- ApplyHostConfigurationBehavior.cs
- DeploymentSectionCache.cs
- SystemColors.cs
- TaskFileService.cs
- ObjectPropertyMapping.cs
- AggregateNode.cs
- UIElement3D.cs
- HostExecutionContextManager.cs
- ComponentChangingEvent.cs
- Int32CAMarshaler.cs
- BrowserCapabilitiesFactoryBase.cs
- XDRSchema.cs
- InternalPolicyElement.cs
- AccessDataSourceView.cs
- DataGridTable.cs
- StructuredTypeEmitter.cs
- RectAnimationClockResource.cs
- MediaTimeline.cs
- contentDescriptor.cs
- Formatter.cs
- SortAction.cs
- LastQueryOperator.cs
- ImageSourceValueSerializer.cs
- base64Transforms.cs
- ResponseStream.cs
- DocumentApplicationJournalEntry.cs
- FileUtil.cs
- ItemList.cs
- XmlIlTypeHelper.cs
- DatagridviewDisplayedBandsData.cs
- HttpCookie.cs
- GenericTypeParameterBuilder.cs
- StateChangeEvent.cs
- SpecularMaterial.cs
- ProviderBase.cs
- WhitespaceRule.cs
- HtmlInputText.cs
- PermissionAttributes.cs
- VarRemapper.cs
- SoapIgnoreAttribute.cs
- XsltCompileContext.cs
- Reference.cs
- RouteParameter.cs
- MarkupCompiler.cs
- DBDataPermission.cs
- SafeWaitHandle.cs
- DependentList.cs
- NegationPusher.cs
- Figure.cs
- PrtCap_Base.cs
- ResXBuildProvider.cs
- CompiledQuery.cs
- CustomActivityDesigner.cs
- SafeCoTaskMem.cs
- ImageClickEventArgs.cs
- NetworkInformationException.cs
- DataMemberListEditor.cs
- RadioButton.cs
- DoubleLinkListEnumerator.cs
- QilLiteral.cs
- IChannel.cs
- ContainerParaClient.cs
- UriSection.cs
- Dump.cs
- XmlCharType.cs
- PropertiesTab.cs
- ToolTip.cs
- BamlBinaryWriter.cs
- AutomationAttributeInfo.cs
- AutomationTextAttribute.cs
- DependentList.cs
- RevocationPoint.cs
- Gdiplus.cs
- StructuredCompositeActivityDesigner.cs
- PropertyTabAttribute.cs
- DbSourceCommand.cs
- EditingMode.cs
- CodeEntryPointMethod.cs
- MailBnfHelper.cs
- X509Certificate2Collection.cs
- ServiceBehaviorElementCollection.cs
- DataGridColumnReorderingEventArgs.cs