Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------------------- // 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; Action onViaCallback; 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
- RequestCacheEntry.cs
- SafeTokenHandle.cs
- OleDbPropertySetGuid.cs
- Thread.cs
- TextTabProperties.cs
- UnauthorizedAccessException.cs
- WebPartMenuStyle.cs
- DependencyPropertyConverter.cs
- PropertyTabChangedEvent.cs
- CmsInterop.cs
- OperationResponse.cs
- MarginCollapsingState.cs
- IHttpResponseInternal.cs
- BrushMappingModeValidation.cs
- MergablePropertyAttribute.cs
- WebBodyFormatMessageProperty.cs
- DesignConnectionCollection.cs
- RepeaterCommandEventArgs.cs
- DBNull.cs
- StylusSystemGestureEventArgs.cs
- _Win32.cs
- DescendantOverDescendantQuery.cs
- DrawingImage.cs
- HtmlAnchor.cs
- EntityDataSourceReferenceGroup.cs
- ComboBoxRenderer.cs
- ColumnMapVisitor.cs
- GlyphRunDrawing.cs
- FontWeights.cs
- RequestDescription.cs
- ColorTranslator.cs
- SchemaNames.cs
- RequestUriProcessor.cs
- MenuItem.cs
- IndexedSelectQueryOperator.cs
- PeerApplication.cs
- UnmanagedMemoryStreamWrapper.cs
- TextDecorationLocationValidation.cs
- HttpPostProtocolReflector.cs
- XmlDocumentFieldSchema.cs
- XmlReaderDelegator.cs
- BoolExpressionVisitors.cs
- ScriptBehaviorDescriptor.cs
- embossbitmapeffect.cs
- FilterException.cs
- XmlSchemaChoice.cs
- CheckBox.cs
- BaseTemplateCodeDomTreeGenerator.cs
- NavigationProperty.cs
- ImageCodecInfoPrivate.cs
- PathGradientBrush.cs
- TextWriter.cs
- _RequestCacheProtocol.cs
- DataGridRowsPresenter.cs
- HttpStreamFormatter.cs
- KeyTimeConverter.cs
- ListItem.cs
- CounterSample.cs
- PolyBezierSegment.cs
- ValidationRuleCollection.cs
- ProgressiveCrcCalculatingStream.cs
- CompilerInfo.cs
- MessageHeaderAttribute.cs
- ListView.cs
- GifBitmapEncoder.cs
- CqlIdentifiers.cs
- NegatedCellConstant.cs
- Label.cs
- ICollection.cs
- FormClosedEvent.cs
- GeometryHitTestResult.cs
- XmlDataCollection.cs
- MenuEventArgs.cs
- SqlConnectionString.cs
- InkCanvasAutomationPeer.cs
- _NetworkingPerfCounters.cs
- BroadcastEventHelper.cs
- CheckBoxFlatAdapter.cs
- ReceiveDesigner.xaml.cs
- RegexTree.cs
- AgileSafeNativeMemoryHandle.cs
- GetPageCompletedEventArgs.cs
- DocumentationServerProtocol.cs
- SiteOfOriginContainer.cs
- WebPartConnectionsConnectVerb.cs
- NotifyCollectionChangedEventArgs.cs
- OLEDB_Util.cs
- CustomAssemblyResolver.cs
- WebException.cs
- PropVariant.cs
- DbConnectionPool.cs
- MDIClient.cs
- DetailsViewInsertedEventArgs.cs
- KoreanCalendar.cs
- AspNetHostingPermission.cs
- IncrementalHitTester.cs
- XPathDocument.cs
- EnumConverter.cs
- CatalogPartCollection.cs
- SQLByte.cs