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
- DrawingAttributes.cs
- ListenerBinder.cs
- RecognizedPhrase.cs
- XmlTextReaderImpl.cs
- HierarchicalDataTemplate.cs
- CookieHandler.cs
- _FixedSizeReader.cs
- ProfileInfo.cs
- RenderData.cs
- CqlLexerHelpers.cs
- XPathAxisIterator.cs
- TargetParameterCountException.cs
- FixedSOMPage.cs
- Int32Collection.cs
- XmlILCommand.cs
- PeerCollaborationPermission.cs
- InvalidCommandTreeException.cs
- LicenseManager.cs
- FormViewPagerRow.cs
- MouseActionConverter.cs
- DocumentApplicationJournalEntryEventArgs.cs
- EventTrigger.cs
- FontFamilyConverter.cs
- Base64Decoder.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- Completion.cs
- QilCloneVisitor.cs
- FindCriteria.cs
- DbProviderSpecificTypePropertyAttribute.cs
- ItemCollectionEditor.cs
- DesignerInterfaces.cs
- XmlName.cs
- ColorTransform.cs
- PositiveTimeSpanValidator.cs
- XmlElementAttributes.cs
- LineServicesRun.cs
- XmlSchemaFacet.cs
- PageAction.cs
- EventManager.cs
- FigureHelper.cs
- DataGridViewComponentPropertyGridSite.cs
- ToolboxSnapDragDropEventArgs.cs
- OracleInternalConnection.cs
- Transform.cs
- XslTransform.cs
- WindowsListViewItem.cs
- ConfigurationManagerHelper.cs
- BidOverLoads.cs
- ListBase.cs
- TreeViewImageIndexConverter.cs
- SessionStateSection.cs
- UrlUtility.cs
- GroupByExpressionRewriter.cs
- MenuItemStyle.cs
- COSERVERINFO.cs
- BaseCAMarshaler.cs
- HttpPostProtocolImporter.cs
- SQLMoneyStorage.cs
- SystemFonts.cs
- WindowsListViewItemCheckBox.cs
- DataGridViewComboBoxColumn.cs
- DependencyPropertyConverter.cs
- TransactionContextManager.cs
- SafeFileMapViewHandle.cs
- FastPropertyAccessor.cs
- SelectionUIHandler.cs
- CodeAttributeArgumentCollection.cs
- SaveFileDialogDesigner.cs
- ISCIIEncoding.cs
- PolicyLevel.cs
- EdgeProfileValidation.cs
- ProgressBarHighlightConverter.cs
- figurelengthconverter.cs
- MethodBuilderInstantiation.cs
- ConnectorSelectionGlyph.cs
- BooleanStorage.cs
- _StreamFramer.cs
- WebPartTransformer.cs
- Knowncolors.cs
- ConsoleTraceListener.cs
- FacetChecker.cs
- SelectionGlyph.cs
- updateconfighost.cs
- CacheOutputQuery.cs
- PeerNameRecordCollection.cs
- HttpHostedTransportConfiguration.cs
- EventsTab.cs
- RenderCapability.cs
- HttpResponseInternalWrapper.cs
- xsdvalidator.cs
- KeyboardDevice.cs
- Rect3DConverter.cs
- ArglessEventHandlerProxy.cs
- FixedTextContainer.cs
- AnnotationComponentChooser.cs
- BitFlagsGenerator.cs
- AppLevelCompilationSectionCache.cs
- DataExpression.cs
- HashLookup.cs
- ElementUtil.cs