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
- RadioButtonBaseAdapter.cs
- ButtonColumn.cs
- FlowDocumentScrollViewer.cs
- PageTheme.cs
- ProgressChangedEventArgs.cs
- CodeComment.cs
- Base64Stream.cs
- WebServiceClientProxyGenerator.cs
- RuleProcessor.cs
- Zone.cs
- SHA1CryptoServiceProvider.cs
- RightsManagementPermission.cs
- FileSystemEventArgs.cs
- WebPartDisplayMode.cs
- ValueExpressions.cs
- Crypto.cs
- DictionaryMarkupSerializer.cs
- XsdBuilder.cs
- JavascriptCallbackMessageInspector.cs
- DBCSCodePageEncoding.cs
- HttpListener.cs
- ListViewItem.cs
- PropertySegmentSerializer.cs
- IdentityModelStringsVersion1.cs
- Select.cs
- TreeSet.cs
- HttpCacheParams.cs
- HitTestParameters.cs
- CodeVariableReferenceExpression.cs
- DataSourceControlBuilder.cs
- DataGridViewTextBoxEditingControl.cs
- ConsumerConnectionPoint.cs
- EmbeddedMailObject.cs
- CodeBlockBuilder.cs
- COM2TypeInfoProcessor.cs
- PropertyPath.cs
- MDIClient.cs
- Oid.cs
- HtmlForm.cs
- WebPartEventArgs.cs
- MemberExpression.cs
- DiagnosticsElement.cs
- Aggregates.cs
- TableAutomationPeer.cs
- SiteMapPath.cs
- IdentityManager.cs
- PTManager.cs
- GCHandleCookieTable.cs
- AssertSection.cs
- TextContainerChangeEventArgs.cs
- InternalResources.cs
- FontStyleConverter.cs
- PageContentCollection.cs
- XmlReader.cs
- RIPEMD160.cs
- Avt.cs
- CollectionContainer.cs
- ContentPlaceHolder.cs
- TypeAccessException.cs
- UriTemplateVariableQueryValue.cs
- TextEndOfSegment.cs
- ThaiBuddhistCalendar.cs
- ConstraintStruct.cs
- ListViewInsertEventArgs.cs
- LocalBuilder.cs
- BridgeDataRecord.cs
- ReadWriteSpinLock.cs
- OutputCacheProviderCollection.cs
- FileDocument.cs
- ImageDrawing.cs
- SmtpMail.cs
- WebPartEventArgs.cs
- DeploymentSection.cs
- AppDomainProtocolHandler.cs
- DateTimeOffset.cs
- MachineKeyConverter.cs
- FixUpCollection.cs
- XmlSchemaGroup.cs
- MouseActionConverter.cs
- IISUnsafeMethods.cs
- BulletedList.cs
- ThreadNeutralSemaphore.cs
- SizeIndependentAnimationStorage.cs
- LongValidator.cs
- ExecutionContext.cs
- StandardCommands.cs
- URIFormatException.cs
- WindowsTreeView.cs
- MenuStrip.cs
- ApplicationId.cs
- ObjectAssociationEndMapping.cs
- ProtocolsSection.cs
- Model3DCollection.cs
- SqlProfileProvider.cs
- StatusBarPanel.cs
- QueryContext.cs
- BuildManagerHost.cs
- PointCollectionValueSerializer.cs
- ContainerFilterService.cs
- TextSpan.cs