Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / ConnectionOrientedTransportManager.cs / 1 / ConnectionOrientedTransportManager.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System; using System.ServiceModel.Activation; using System.ServiceModel; using System.Net; using System.Net.Sockets; using System.Collections.Generic; abstract class ConnectionOrientedTransportManager: TransportManager where TChannelListener : ConnectionOrientedTransportChannelListener { UriPrefixTable addressTable; int connectionBufferSize; TimeSpan channelInitializationTimeout; int maxPendingConnections; TimeSpan maxOutputDelay; int maxPendingAccepts; TimeSpan idleTimeout; int maxPooledConnections; MessageReceivedCallback messageReceivedCallback; protected ConnectionOrientedTransportManager() { this.addressTable = new UriPrefixTable (); } UriPrefixTable AddressTable { get { return addressTable; } } protected TimeSpan ChannelInitializationTimeout { get { return channelInitializationTimeout; } } internal void ApplyListenerSettings(IConnectionOrientedListenerSettings listenerSettings) { this.connectionBufferSize = listenerSettings.ConnectionBufferSize; this.channelInitializationTimeout = listenerSettings.ChannelInitializationTimeout; this.maxPendingConnections = listenerSettings.MaxPendingConnections; this.maxOutputDelay = listenerSettings.MaxOutputDelay; this.maxPendingAccepts = listenerSettings.MaxPendingAccepts; this.idleTimeout = listenerSettings.IdleTimeout; this.maxPooledConnections = listenerSettings.MaxPooledConnections; } internal int ConnectionBufferSize { get { return this.connectionBufferSize; } } internal int MaxPendingConnections { get { return this.maxPendingConnections; } } internal TimeSpan MaxOutputDelay { get { return maxOutputDelay; } } internal int MaxPendingAccepts { get { return this.maxPendingAccepts; } } internal TimeSpan IdleTimeout { get { return this.idleTimeout; } } internal int MaxPooledConnections { get { return this.maxPooledConnections; } } internal bool IsCompatible(ConnectionOrientedTransportChannelListener channelListener) { if (channelListener.InheritBaseAddressSettings) return true; return ( (this.ChannelInitializationTimeout == channelListener.ChannelInitializationTimeout) && (this.ConnectionBufferSize == channelListener.ConnectionBufferSize) && (this.MaxPendingConnections == channelListener.MaxPendingConnections) && (this.MaxOutputDelay == channelListener.MaxOutputDelay) && (this.MaxPendingAccepts == channelListener.MaxPendingAccepts) && (this.idleTimeout == channelListener.IdleTimeout) && (this.maxPooledConnections == channelListener.MaxPooledConnections) ); } TChannelListener GetChannelListener(Uri via) { TChannelListener channelListener = null; if (AddressTable.TryLookupUri(via, HostNameComparisonMode.StrongWildcard, out channelListener)) { return channelListener; } if (AddressTable.TryLookupUri(via, HostNameComparisonMode.Exact, out channelListener)) { return channelListener; } AddressTable.TryLookupUri(via, HostNameComparisonMode.WeakWildcard, out channelListener); return channelListener; } internal void OnDemuxerError(Exception exception) { lock (ThisLock) { this.Fault(this.AddressTable, exception); } } internal ISingletonChannelListener OnGetSingletonMessageHandler(ServerSingletonPreambleConnectionReader serverSingletonPreambleReader) { Uri via = serverSingletonPreambleReader.Via; TChannelListener channelListener = GetChannelListener(via); if (channelListener != null) { if (channelListener is IChannelListener ) { channelListener.RaiseMessageReceived(); return (ISingletonChannelListener)channelListener; } else { serverSingletonPreambleReader.SendFault(FramingEncodingString.UnsupportedModeFault); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ProtocolException(SR.GetString(SR.FramingModeNotSupported, FramingMode.Singleton))); } } else { serverSingletonPreambleReader.SendFault(FramingEncodingString.EndpointNotFoundFault); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new EndpointNotFoundException(SR.GetString(SR.EndpointNotFound, via))); } } internal void OnHandleServerSessionPreamble(ServerSessionPreambleConnectionReader serverSessionPreambleReader, ConnectionDemuxer connectionDemuxer) { Uri via = serverSessionPreambleReader.Via; TChannelListener channelListener = GetChannelListener(via); if (channelListener != null) { ISessionPreambleHandler sessionPreambleHandler = channelListener as ISessionPreambleHandler; if (sessionPreambleHandler != null && channelListener is IChannelListener ) { sessionPreambleHandler.HandleServerSessionPreamble(serverSessionPreambleReader, connectionDemuxer); } else { serverSessionPreambleReader.SendFault(FramingEncodingString.UnsupportedModeFault); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ProtocolException(SR.GetString(SR.FramingModeNotSupported, FramingMode.Duplex))); } } else { serverSessionPreambleReader.SendFault(FramingEncodingString.EndpointNotFoundFault); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new EndpointNotFoundException(SR.GetString(SR.DuplexSessionListenerNotFound, via.ToString()))); } } internal IConnectionOrientedTransportFactorySettings OnGetTransportFactorySettings(Uri via) { return GetChannelListener(via); } internal override void Register(TransportChannelListener channelListener) { AddressTable.RegisterUri(channelListener.Uri, channelListener.HostNameComparisonModeInternal, (TChannelListener)channelListener); channelListener.SetMessageReceivedCallback(new MessageReceivedCallback(OnMessageReceived)); } internal override void Unregister(TransportChannelListener channelListener) { EnsureRegistered(AddressTable, (TChannelListener)channelListener, channelListener.HostNameComparisonModeInternal); AddressTable.UnregisterUri(channelListener.Uri, channelListener.HostNameComparisonModeInternal); channelListener.SetMessageReceivedCallback(null); } internal void SetMessageReceivedCallback(MessageReceivedCallback messageReceivedCallback) { this.messageReceivedCallback = messageReceivedCallback; } void OnMessageReceived() { if (messageReceivedCallback != null) { messageReceivedCallback(); } } } } // 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
- PrivateUnsafeNativeCompoundFileMethods.cs
- EventLogPermissionAttribute.cs
- ConnectionStringSettings.cs
- HitTestDrawingContextWalker.cs
- UnsafeNativeMethods.cs
- X509RawDataKeyIdentifierClause.cs
- CheckBoxField.cs
- AutomationElementIdentifiers.cs
- util.cs
- ZipPackagePart.cs
- WebResourceAttribute.cs
- XPathNavigatorKeyComparer.cs
- StylusCollection.cs
- PropertyRecord.cs
- StackSpiller.Generated.cs
- ValidateNames.cs
- TreeViewCancelEvent.cs
- RecognizedPhrase.cs
- SortExpressionBuilder.cs
- ComponentFactoryHelpers.cs
- ProxyAssemblyNotLoadedException.cs
- WebSysDisplayNameAttribute.cs
- CharEntityEncoderFallback.cs
- SqlUserDefinedAggregateAttribute.cs
- IPAddressCollection.cs
- Line.cs
- RegisteredHiddenField.cs
- SafeMILHandle.cs
- TemplateApplicationHelper.cs
- ToggleButtonAutomationPeer.cs
- FileDetails.cs
- SaveFileDialog.cs
- DictionarySectionHandler.cs
- RuntimeIdentifierPropertyAttribute.cs
- ActivityTrace.cs
- BasicViewGenerator.cs
- ServiceBehaviorElement.cs
- IndexedEnumerable.cs
- InvalidComObjectException.cs
- HostVisual.cs
- IssuedTokenClientBehaviorsElementCollection.cs
- KeyValueInternalCollection.cs
- ColumnResizeUndoUnit.cs
- DeclarationUpdate.cs
- XmlEntity.cs
- DoubleStorage.cs
- IUnknownConstantAttribute.cs
- SqlFormatter.cs
- CodeMethodMap.cs
- EditorAttribute.cs
- Main.cs
- MarshalByValueComponent.cs
- XmlObjectSerializerWriteContextComplex.cs
- SiteMapProvider.cs
- HtmlEncodedRawTextWriter.cs
- ResourcePart.cs
- AuthorizationRuleCollection.cs
- DiscoveryExceptionDictionary.cs
- SqlBuilder.cs
- CachedCompositeFamily.cs
- HorizontalAlignConverter.cs
- MimeTextImporter.cs
- NativeMethods.cs
- ClientScriptManager.cs
- DataServiceBuildProvider.cs
- Binding.cs
- ComPlusThreadInitializer.cs
- ConditionCollection.cs
- ISO2022Encoding.cs
- PagesChangedEventArgs.cs
- ReadOnlyHierarchicalDataSourceView.cs
- CommandConverter.cs
- EventBuilder.cs
- Section.cs
- ListenerSingletonConnectionReader.cs
- XPathQueryGenerator.cs
- AnonymousIdentificationSection.cs
- WebPartUserCapability.cs
- DrawingBrush.cs
- FileLogRecordEnumerator.cs
- DiagnosticStrings.cs
- HotSpot.cs
- ImageKeyConverter.cs
- ExpressionLexer.cs
- DesignerForm.cs
- Material.cs
- QilStrConcatenator.cs
- ToolStripRenderEventArgs.cs
- MatrixTransform.cs
- ToolConsole.cs
- AdRotator.cs
- PenThread.cs
- WebPartMinimizeVerb.cs
- EnumerableRowCollection.cs
- XmlSignatureProperties.cs
- SettingsPropertyCollection.cs
- ReaderContextStackData.cs
- TCPClient.cs
- ToolStripRendererSwitcher.cs
- XmlDocument.cs