Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / TransportReplyChannelAcceptor.cs / 1 / TransportReplyChannelAcceptor.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.Diagnostics; using System.ServiceModel.Diagnostics; class TransportReplyChannelAcceptor : ReplyChannelAcceptor { TransportManagerContainer transportManagerContainer; TransportChannelListener listener; public TransportReplyChannelAcceptor(TransportChannelListener listener) : base(listener) { this.listener = listener; } protected override ReplyChannel OnCreateChannel() { return new TransportReplyChannel(this.ChannelManager, null); } protected override void OnOpening() { base.OnOpening(); this.transportManagerContainer = this.listener.GetTransportManagers(); this.listener = null; } protected override void OnAbort() { base.OnAbort(); if (this.transportManagerContainer != null && !TransferTransportManagers()) { this.transportManagerContainer.Close(); } } IAsyncResult DummyBeginClose(TimeSpan timeout, AsyncCallback callback, object state) { return new CompletedAsyncResult(callback, state); } void DummyEndClose(IAsyncResult result) { CompletedAsyncResult.End(result); } protected override IAsyncResult OnBeginClose(TimeSpan timeout, AsyncCallback callback, object state) { ChainedBeginHandler begin1 = DummyBeginClose; ChainedEndHandler end1 = DummyEndClose; if (this.transportManagerContainer != null && !TransferTransportManagers()) { begin1 = this.transportManagerContainer.BeginClose; end1 = this.transportManagerContainer.EndClose; } return new ChainedAsyncResult(timeout, callback, state, base.OnBeginClose, base.OnEndClose, begin1, end1); } protected override void OnEndClose(IAsyncResult result) { ChainedAsyncResult.End(result); } protected override void OnClose(TimeSpan timeout) { TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); base.OnClose(timeoutHelper.RemainingTime()); if (this.transportManagerContainer != null && !TransferTransportManagers()) { this.transportManagerContainer.Close(); } } // used to decouple our channel and listener lifetimes bool TransferTransportManagers() { TransportReplyChannel singletonChannel = (TransportReplyChannel)base.GetCurrentChannel(); if (singletonChannel == null) { return false; } else { return singletonChannel.TransferTransportManagers(this.transportManagerContainer); } } // tracks TransportManager so that the channel can outlive the Listener protected class TransportReplyChannel : ReplyChannel { TransportManagerContainer transportManagerContainer; public TransportReplyChannel(ChannelManagerBase channelManager, EndpointAddress localAddress) : base(channelManager, localAddress) { } public bool TransferTransportManagers(TransportManagerContainer transportManagerContainer) { lock (ThisLock) { if (this.State != CommunicationState.Opened) { return false; } this.transportManagerContainer = transportManagerContainer; return true; } } protected override void OnAbort() { if (this.transportManagerContainer != null) { this.transportManagerContainer.Close(); } base.OnAbort(); } protected override void OnClose(TimeSpan timeout) { if (this.transportManagerContainer != null) { this.transportManagerContainer.Close(); } base.OnClose(timeout); } IAsyncResult DummyBeginClose(TimeSpan timeout, AsyncCallback callback, object state) { return new CompletedAsyncResult(callback, state); } void DummyEndClose(IAsyncResult result) { CompletedAsyncResult.End(result); } protected override IAsyncResult OnBeginClose(TimeSpan timeout, AsyncCallback callback, object state) { ChainedBeginHandler begin1 = DummyBeginClose; ChainedEndHandler end1 = DummyEndClose; if (this.transportManagerContainer != null) { begin1 = this.transportManagerContainer.BeginClose; end1 = this.transportManagerContainer.EndClose; } return new ChainedAsyncResult(timeout, callback, state, begin1, end1, base.OnBeginClose, base.OnEndClose); } protected override void OnEndClose(IAsyncResult result) { ChainedAsyncResult.End(result); } } } } // 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
- ExceptionHelpers.cs
- InvalidDataContractException.cs
- DynamicDiscoveryDocument.cs
- StringValidatorAttribute.cs
- baseaxisquery.cs
- SqlConnectionFactory.cs
- OptimalTextSource.cs
- SiteMapDataSourceDesigner.cs
- InOutArgument.cs
- XmlSchemaAppInfo.cs
- _Connection.cs
- LightweightCodeGenerator.cs
- LocalizableAttribute.cs
- XmlDictionaryReader.cs
- OleDbWrapper.cs
- Attributes.cs
- AnimationException.cs
- Part.cs
- IsolationInterop.cs
- DocumentApplicationJournalEntry.cs
- ProjectionPruner.cs
- Buffer.cs
- SystemWebExtensionsSectionGroup.cs
- CalendarTable.cs
- MultiSelectRootGridEntry.cs
- ResourceProperty.cs
- Attribute.cs
- InkCanvas.cs
- HtmlInputCheckBox.cs
- ObjectConverter.cs
- XmlAutoDetectWriter.cs
- ProjectionPlan.cs
- comcontractssection.cs
- WebException.cs
- PageMediaSize.cs
- StatusBarDrawItemEvent.cs
- ListControl.cs
- SmiEventSink_Default.cs
- BoundField.cs
- InputMethod.cs
- SharedPerformanceCounter.cs
- DbConnectionStringCommon.cs
- RankException.cs
- TreeNodeConverter.cs
- ToolStripPanelCell.cs
- HttpModulesSection.cs
- DataGridViewControlCollection.cs
- JsonXmlDataContract.cs
- Internal.cs
- TextEditorCopyPaste.cs
- ProgressiveCrcCalculatingStream.cs
- CursorConverter.cs
- StorageFunctionMapping.cs
- SchemaTableOptionalColumn.cs
- EventWaitHandleSecurity.cs
- CodeCatchClauseCollection.cs
- DBConnection.cs
- ClientTargetCollection.cs
- WebDisplayNameAttribute.cs
- StylusShape.cs
- HMAC.cs
- UriParserTemplates.cs
- DataListItemCollection.cs
- LocationChangedEventArgs.cs
- EntityContainerRelationshipSetEnd.cs
- PagePropertiesChangingEventArgs.cs
- TimeSpanSecondsConverter.cs
- ProcessHostFactoryHelper.cs
- ScrollBar.cs
- TranslateTransform.cs
- StylusDownEventArgs.cs
- CallbackValidatorAttribute.cs
- AutomationIdentifier.cs
- ISAPIApplicationHost.cs
- HostProtectionPermission.cs
- Types.cs
- WebRequestModuleElement.cs
- NameHandler.cs
- WindowsContainer.cs
- listitem.cs
- TableParagraph.cs
- IDReferencePropertyAttribute.cs
- ConfigurationValidatorAttribute.cs
- SqlBuffer.cs
- BooleanKeyFrameCollection.cs
- TransformedBitmap.cs
- ElapsedEventArgs.cs
- ToolStripOverflowButton.cs
- BindUriHelper.cs
- HighlightVisual.cs
- ProxyGenerationError.cs
- DataGridCellsPresenter.cs
- DllNotFoundException.cs
- Int32AnimationBase.cs
- Win32MouseDevice.cs
- SchemaObjectWriter.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- ThreadSafeList.cs
- PolicyStatement.cs
- TreeNodeClickEventArgs.cs