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
- DesignerLoader.cs
- FacetDescription.cs
- DbTransaction.cs
- WeakEventManager.cs
- DataGridViewBindingCompleteEventArgs.cs
- Simplifier.cs
- UInt16.cs
- CollectionChangedEventManager.cs
- StateManagedCollection.cs
- ConfigurationStrings.cs
- TreeChangeInfo.cs
- TakeQueryOptionExpression.cs
- SQLResource.cs
- DateTime.cs
- XPathScanner.cs
- FileDialogPermission.cs
- TextSimpleMarkerProperties.cs
- TreeIterator.cs
- AssemblyInfo.cs
- HtmlForm.cs
- MarkupObject.cs
- PolicyLevel.cs
- WebAdminConfigurationHelper.cs
- SystemIPGlobalProperties.cs
- WriteableBitmap.cs
- Monitor.cs
- Merger.cs
- ControlCollection.cs
- QueryOperationResponseOfT.cs
- CheckBoxBaseAdapter.cs
- BmpBitmapDecoder.cs
- PolygonHotSpot.cs
- MatrixCamera.cs
- _CommandStream.cs
- DefaultPrintController.cs
- shaperfactoryquerycachekey.cs
- ColumnTypeConverter.cs
- OdbcConnectionHandle.cs
- WizardForm.cs
- OdbcEnvironment.cs
- LinqDataSourceSelectEventArgs.cs
- Activator.cs
- SocketInformation.cs
- streamingZipPartStream.cs
- WebPartTransformerCollection.cs
- AvTraceFormat.cs
- NumericPagerField.cs
- TextEffectCollection.cs
- SystemColors.cs
- SmiGettersStream.cs
- DataSourceProvider.cs
- NativeRightsManagementAPIsStructures.cs
- XComponentModel.cs
- TimeZoneInfo.cs
- SharedTcpTransportManager.cs
- Context.cs
- ListParaClient.cs
- DynamicMethod.cs
- HtmlCommandAdapter.cs
- BitmapEncoder.cs
- objectquery_tresulttype.cs
- assertwrapper.cs
- GridViewColumnHeader.cs
- CachedCompositeFamily.cs
- DecoderNLS.cs
- IndexedEnumerable.cs
- InstanceHandle.cs
- HyperLinkField.cs
- DbQueryCommandTree.cs
- RegisteredArrayDeclaration.cs
- TableColumn.cs
- StorageRoot.cs
- DispatcherObject.cs
- WorkflowServiceBehavior.cs
- StringWriter.cs
- ArgumentNullException.cs
- MouseEventArgs.cs
- NavigationExpr.cs
- CalloutQueueItem.cs
- TreeNode.cs
- TemplateContent.cs
- AppDomainGrammarProxy.cs
- xml.cs
- EncodingInfo.cs
- EntityTransaction.cs
- reliableinputsessionchannel.cs
- dbenumerator.cs
- GridErrorDlg.cs
- DataObjectAttribute.cs
- Helper.cs
- XmlEncoding.cs
- OSEnvironmentHelper.cs
- IsolatedStoragePermission.cs
- PenThreadPool.cs
- UpDownBase.cs
- ErrorWrapper.cs
- _IPv6Address.cs
- WebServiceData.cs
- WebPartConnectVerb.cs
- IndexedString.cs