Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / System.ServiceModel.Activation / System / ServiceModel / Activation / HostedNamedPipeTransportManager.cs / 1305376 / HostedNamedPipeTransportManager.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Activation { using System.Collections.Generic; using System.Diagnostics; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Diagnostics; class HostedNamedPipeTransportManager : NamedPipeTransportManager { bool settingsApplied; ActiononViaCallback; SharedConnectionListener listener; ConnectionDemuxer connectionDemuxer; int queueId; Guid token; Func onDuplicatedViaCallback; bool demuxerCreated; public HostedNamedPipeTransportManager(BaseUriWithWildcard baseAddress) : base(baseAddress.BaseAddress) { this.HostNameComparisonMode = baseAddress.HostNameComparisonMode; this.onViaCallback = new Action (OnVia); this.onDuplicatedViaCallback = new Func (OnDuplicatedVia); } protected override bool IsCompatible(NamedPipeChannelListener channelListener) { if (channelListener.HostedVirtualPath == null) { return false; } return base.IsCompatible(channelListener); } internal void Start(int queueId, Guid token, Action messageReceivedCallback) { SetMessageReceivedCallback(messageReceivedCallback); OnOpenInternal(queueId, token); } internal override void OnOpen() { // This is intentionally empty. } internal override void OnAbort() { } internal void Stop(TimeSpan timeout) { Cleanup(false, timeout); } void Cleanup(bool aborting, TimeSpan timeout) { lock (ThisLock) { if (listener != null) { if (!aborting) { listener.Stop(timeout); } else { listener.Abort(); } // The listener will be closed by the demuxer. listener = null; } if (connectionDemuxer != null) { connectionDemuxer.Dispose(); } demuxerCreated = false; settingsApplied = false; } } void CreateConnectionDemuxer() { IConnectionListener connectionListener = new BufferedConnectionListener(listener, MaxOutputDelay, ConnectionBufferSize); if (DiagnosticUtility.ShouldUseActivity) { connectionListener = new TracingConnectionListener(connectionListener, this.ListenUri); } connectionDemuxer = new ConnectionDemuxer(connectionListener, MaxPendingAccepts, MaxPendingConnections, ChannelInitializationTimeout, IdleTimeout, MaxPooledConnections, OnGetTransportFactorySettings, OnGetSingletonMessageHandler, OnHandleServerSessionPreamble, OnDemuxerError); connectionDemuxer.StartDemuxing(onViaCallback); } void OnOpenInternal(int queueId, Guid token) { lock (ThisLock) { this.queueId = queueId; this.token = token; BaseUriWithWildcard path = new BaseUriWithWildcard(this.ListenUri, this.HostNameComparisonMode); listener = new SharedConnectionListener(path, queueId, token, this.onDuplicatedViaCallback); } } internal override void OnClose(TimeSpan timeout) { } void OnVia(Uri address) { Debug.Print("HostedNamedPipeTransportManager.OnVia() address: " + address + " calling EnsureServiceAvailable()"); ServiceHostingEnvironment.EnsureServiceAvailable(address.LocalPath); } protected override void OnSelecting(NamedPipeChannelListener channelListener) { if (settingsApplied) { return; } lock (ThisLock) { if (settingsApplied) { // Use the setting for the first one. return; } this.ApplyListenerSettings(channelListener); settingsApplied = true; } } // This method is called only for the first via of the current proxy. int OnDuplicatedVia(Uri via) { OnVia(via); if (!demuxerCreated) { lock (ThisLock) { if (listener == null) { // The listener has been stopped. throw FxTrace.Exception.AsError(new CommunicationObjectAbortedException(SR.PipeListenerProxyStopped)); } if (!demuxerCreated) { CreateConnectionDemuxer(); demuxerCreated = true; } } } return this.ConnectionBufferSize; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ColumnWidthChangedEvent.cs
- SimpleHandlerFactory.cs
- GridViewColumnHeaderAutomationPeer.cs
- BaseCollection.cs
- CodeAttachEventStatement.cs
- SettingsPropertyIsReadOnlyException.cs
- SecurityKeyIdentifier.cs
- PropertyGridCommands.cs
- RadialGradientBrush.cs
- Events.cs
- XpsSerializationManagerAsync.cs
- InstanceDataCollectionCollection.cs
- MexTcpBindingElement.cs
- CodeConditionStatement.cs
- ModuleBuilder.cs
- SmiContext.cs
- Visual.cs
- ContainerParaClient.cs
- ApplicationCommands.cs
- RegexCode.cs
- Vector3DValueSerializer.cs
- SqlProviderUtilities.cs
- SecurityTokenException.cs
- safelink.cs
- AlphabeticalEnumConverter.cs
- XmlNamespaceDeclarationsAttribute.cs
- GacUtil.cs
- AttributeCollection.cs
- cookiecontainer.cs
- PropertyTabChangedEvent.cs
- RepeaterItemEventArgs.cs
- DefaultValueConverter.cs
- Fault.cs
- cache.cs
- ConfigurationProperty.cs
- XsltContext.cs
- JsonEnumDataContract.cs
- PackageDocument.cs
- ObjectDataSourceFilteringEventArgs.cs
- Span.cs
- WebPartConnectionsEventArgs.cs
- UTF32Encoding.cs
- TemplateField.cs
- ContentElement.cs
- XamlToRtfParser.cs
- X509PeerCertificateAuthentication.cs
- AlgoModule.cs
- GridSplitterAutomationPeer.cs
- ExpressionLexer.cs
- TextBoxView.cs
- ConnectionPointConverter.cs
- MetadataArtifactLoaderCompositeFile.cs
- StringConcat.cs
- ReadOnlyDataSourceView.cs
- DecimalAverageAggregationOperator.cs
- OperationValidationEventArgs.cs
- Trace.cs
- ImportDesigner.xaml.cs
- ModuleConfigurationInfo.cs
- Inflater.cs
- PipelineModuleStepContainer.cs
- DataRelation.cs
- TemplatedMailWebEventProvider.cs
- PathFigure.cs
- ReliableChannelListener.cs
- OleDbEnumerator.cs
- TagPrefixAttribute.cs
- FaultCallbackWrapper.cs
- StringResourceManager.cs
- HtmlButton.cs
- DiffuseMaterial.cs
- TextEditorSpelling.cs
- SqlConnectionHelper.cs
- CollectionChangedEventManager.cs
- SiteMapPath.cs
- OdbcCommandBuilder.cs
- Closure.cs
- ChannelSinkStacks.cs
- ECDiffieHellmanCngPublicKey.cs
- AssemblyBuilderData.cs
- TypeHelper.cs
- Span.cs
- PageStatePersister.cs
- Shape.cs
- ObjectCache.cs
- mediaeventshelper.cs
- DragEvent.cs
- ResXResourceReader.cs
- CompiledIdentityConstraint.cs
- FormViewUpdatedEventArgs.cs
- DoubleAnimation.cs
- MaxSessionCountExceededException.cs
- ImageAutomationPeer.cs
- DynamicRendererThreadManager.cs
- DependencyPropertyAttribute.cs
- LoginUtil.cs
- SafeNativeMethods.cs
- StickyNoteHelper.cs
- basecomparevalidator.cs
- Button.cs