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
- OleDbWrapper.cs
- TextSimpleMarkerProperties.cs
- FormViewInsertedEventArgs.cs
- ImageButton.cs
- ContentValidator.cs
- GeometryValueSerializer.cs
- WindowsRichEditRange.cs
- BasicBrowserDialog.designer.cs
- DtcInterfaces.cs
- EventPropertyMap.cs
- ObjectSet.cs
- SocketPermission.cs
- PathTooLongException.cs
- AnimationClock.cs
- StyleReferenceConverter.cs
- GridLengthConverter.cs
- SQLRoleProvider.cs
- TextEncodedRawTextWriter.cs
- SHA256Managed.cs
- Wizard.cs
- BinaryFormatter.cs
- KeyValueInternalCollection.cs
- HttpStreamFormatter.cs
- FileInfo.cs
- WindowShowOrOpenTracker.cs
- ExpressionBuilder.cs
- DoubleKeyFrameCollection.cs
- SystemIPGlobalStatistics.cs
- GridViewRowPresenterBase.cs
- TypeBuilder.cs
- SamlSerializer.cs
- Deflater.cs
- EventListenerClientSide.cs
- TrackingConditionCollection.cs
- DataGridViewHitTestInfo.cs
- SqlUtils.cs
- ProfileInfo.cs
- DigitalSignatureProvider.cs
- DataGridColumnCollection.cs
- ViewValidator.cs
- ConstrainedGroup.cs
- UrlParameterReader.cs
- ListSourceHelper.cs
- ResXDataNode.cs
- Header.cs
- COM2ExtendedUITypeEditor.cs
- FrameAutomationPeer.cs
- PerformanceCounterPermissionEntryCollection.cs
- GuidelineCollection.cs
- WebPageTraceListener.cs
- IISMapPath.cs
- DefaultSerializationProviderAttribute.cs
- DesignConnection.cs
- Clipboard.cs
- MemberPath.cs
- CodeMemberEvent.cs
- DataBoundControlAdapter.cs
- AsyncResult.cs
- ObjectSecurity.cs
- XmlSchemaSimpleType.cs
- SystemNetHelpers.cs
- GeneralTransform3DTo2DTo3D.cs
- HostUtils.cs
- URLIdentityPermission.cs
- CaretElement.cs
- nulltextnavigator.cs
- CollaborationHelperFunctions.cs
- SubMenuStyle.cs
- GiveFeedbackEvent.cs
- XmlUnspecifiedAttribute.cs
- WebPartEditVerb.cs
- RectValueSerializer.cs
- SocketAddress.cs
- TableDetailsRow.cs
- PageRequestManager.cs
- Error.cs
- AsymmetricSignatureFormatter.cs
- CancellationState.cs
- BamlTreeUpdater.cs
- NamespaceList.cs
- CompoundFileReference.cs
- FormatException.cs
- CreateUserErrorEventArgs.cs
- WSDualHttpBinding.cs
- X500Name.cs
- ValidationPropertyAttribute.cs
- ResourceReferenceExpressionConverter.cs
- DeferredElementTreeState.cs
- SQLInt32.cs
- DispatcherTimer.cs
- SqlIdentifier.cs
- ToolStripArrowRenderEventArgs.cs
- MarshalByRefObject.cs
- ClientBuildManagerCallback.cs
- UInt16Converter.cs
- EdmConstants.cs
- IISUnsafeMethods.cs
- MenuCommand.cs
- httpapplicationstate.cs
- QilBinary.cs