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
- ScrollBarAutomationPeer.cs
- TextLine.cs
- Message.cs
- tooltip.cs
- ConnectivityStatus.cs
- ObjectDataSource.cs
- ExtensionQuery.cs
- Scheduling.cs
- ActivityWithResultConverter.cs
- EvidenceTypeDescriptor.cs
- ColorInterpolationModeValidation.cs
- ImageField.cs
- XmlArrayAttribute.cs
- ImageConverter.cs
- FloatMinMaxAggregationOperator.cs
- TableDetailsRow.cs
- HyperLinkColumn.cs
- DynamicPropertyReader.cs
- OleDbEnumerator.cs
- MultilineStringEditor.cs
- SystemNetworkInterface.cs
- SizeChangedEventArgs.cs
- XmlWriter.cs
- Drawing.cs
- BypassElementCollection.cs
- Collection.cs
- DeclaredTypeValidator.cs
- FixedPageProcessor.cs
- OptionUsage.cs
- GCHandleCookieTable.cs
- PreProcessor.cs
- ApplicationServiceHelper.cs
- SignatureResourcePool.cs
- PartManifestEntry.cs
- XmlUtf8RawTextWriter.cs
- TraceContextRecord.cs
- ElementNotEnabledException.cs
- TemplateField.cs
- SimpleExpression.cs
- FormViewPageEventArgs.cs
- WebPartCancelEventArgs.cs
- JsonQNameDataContract.cs
- FormViewCommandEventArgs.cs
- BoundColumn.cs
- CompositeKey.cs
- Utils.cs
- DefaultBindingPropertyAttribute.cs
- BuildProviderAppliesToAttribute.cs
- EntityWrapperFactory.cs
- LambdaCompiler.Statements.cs
- WebPartConnectionsDisconnectVerb.cs
- TableNameAttribute.cs
- XmlSchemaAppInfo.cs
- ForeignConstraint.cs
- DataGridViewRowPostPaintEventArgs.cs
- NativeMethods.cs
- MatrixAnimationUsingPath.cs
- TraceSwitch.cs
- XPathNodePointer.cs
- Equal.cs
- NullRuntimeConfig.cs
- EventlogProvider.cs
- AssemblyContextControlItem.cs
- ListViewEditEventArgs.cs
- XPathNavigatorKeyComparer.cs
- ContentFilePart.cs
- DBDataPermission.cs
- SerializationUtilities.cs
- CaseCqlBlock.cs
- SimpleHandlerBuildProvider.cs
- IncrementalHitTester.cs
- TreeWalker.cs
- CollectionType.cs
- Types.cs
- ScaleTransform3D.cs
- printdlgexmarshaler.cs
- BamlCollectionHolder.cs
- CompiledAction.cs
- NavigateEvent.cs
- NotifyIcon.cs
- ParallelTimeline.cs
- TemplatedAdorner.cs
- ConstraintConverter.cs
- ConfigXmlElement.cs
- ListView.cs
- RepeatButton.cs
- DebugView.cs
- HttpWebRequestElement.cs
- AssemblyAttributesGoHere.cs
- RegexWorker.cs
- MobileRedirect.cs
- SoapTypeAttribute.cs
- ReturnEventArgs.cs
- ScrollBar.cs
- StorageFunctionMapping.cs
- _SslSessionsCache.cs
- DataGridColumnDropSeparator.cs
- RotateTransform.cs
- ParameterExpression.cs
- _SSPISessionCache.cs