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
- DataControlFieldsEditor.cs
- QilInvokeLateBound.cs
- DBSqlParser.cs
- CancellableEnumerable.cs
- XslTransform.cs
- WebCategoryAttribute.cs
- XmlILStorageConverter.cs
- CompatibleIComparer.cs
- DataGridColumnHeaderAutomationPeer.cs
- BufferBuilder.cs
- EditorAttributeInfo.cs
- ChineseLunisolarCalendar.cs
- BooleanFunctions.cs
- XmlImplementation.cs
- Win32SafeHandles.cs
- Int32Animation.cs
- CompiledAction.cs
- X509ChainPolicy.cs
- GradientBrush.cs
- MetadataSerializer.cs
- XmlSchemaAppInfo.cs
- PassportIdentity.cs
- BitSet.cs
- MaskedTextBox.cs
- TextMarkerSource.cs
- DataControlReference.cs
- AssemblyCache.cs
- SqlClientMetaDataCollectionNames.cs
- MetadataProperty.cs
- CodeGeneratorAttribute.cs
- PermissionSet.cs
- GridViewColumnCollection.cs
- RowVisual.cs
- XpsStructure.cs
- PersonalizationStateInfo.cs
- TimeSpan.cs
- DesignerHelpers.cs
- ValidationVisibilityAttribute.cs
- XsdDataContractImporter.cs
- SubclassTypeValidatorAttribute.cs
- TerminateSequenceResponse.cs
- XmlWhitespace.cs
- ShapeTypeface.cs
- MetadataArtifactLoaderCompositeFile.cs
- MSAAEventDispatcher.cs
- CommandDevice.cs
- BackStopAuthenticationModule.cs
- TrailingSpaceComparer.cs
- Size.cs
- TimeIntervalCollection.cs
- BindingSource.cs
- HostedHttpTransportManager.cs
- OpCodes.cs
- ImageInfo.cs
- Context.cs
- EmbeddedMailObject.cs
- GeometryGroup.cs
- TransformationRules.cs
- ClientBuildManagerCallback.cs
- ColumnWidthChangedEvent.cs
- MeasureData.cs
- StringValueSerializer.cs
- SafeReversePInvokeHandle.cs
- XPathParser.cs
- UdpSocketReceiveManager.cs
- Expander.cs
- UnhandledExceptionEventArgs.cs
- ContainerActivationHelper.cs
- Reference.cs
- CodeSubDirectory.cs
- X509Certificate.cs
- XmlDataDocument.cs
- CodeStatement.cs
- MULTI_QI.cs
- RectangleHotSpot.cs
- SimpleHandlerBuildProvider.cs
- documentsequencetextpointer.cs
- BehaviorEditorPart.cs
- Screen.cs
- BamlTreeUpdater.cs
- HttpModuleCollection.cs
- CachedFontFamily.cs
- SymbolMethod.cs
- DrawingState.cs
- ClosureBinding.cs
- EventLogTraceListener.cs
- OutputScopeManager.cs
- Ray3DHitTestResult.cs
- DateRangeEvent.cs
- ReadOnlyDataSourceView.cs
- IdentityModelDictionary.cs
- XmlWriterTraceListener.cs
- SchemaDeclBase.cs
- EntityDataReader.cs
- GradientBrush.cs
- ThicknessAnimationUsingKeyFrames.cs
- SelectionProviderWrapper.cs
- BinaryMethodMessage.cs
- typedescriptorpermission.cs
- DataGridViewAddColumnDialog.cs