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
- GroupStyle.cs
- RSAOAEPKeyExchangeFormatter.cs
- DataViewSetting.cs
- RegisteredHiddenField.cs
- SettingsPropertyWrongTypeException.cs
- ChannelManager.cs
- PresentationTraceSources.cs
- DesignerActionMethodItem.cs
- ProfileService.cs
- WeakReferenceKey.cs
- SupportingTokenParameters.cs
- ThreadExceptionEvent.cs
- TypeForwardedToAttribute.cs
- UnsafeNativeMethods.cs
- ServiceModelConfigurationElementCollection.cs
- CallContext.cs
- SerialStream.cs
- PathBox.cs
- ReadWriteSpinLock.cs
- AnnotationResourceCollection.cs
- ComplexObject.cs
- TemplatePropertyEntry.cs
- SizeChangedEventArgs.cs
- PersonalizationAdministration.cs
- SoapSchemaMember.cs
- OdbcConnectionOpen.cs
- XhtmlConformanceSection.cs
- XmlSchemaObject.cs
- RichTextBoxConstants.cs
- DateTimeAutomationPeer.cs
- Latin1Encoding.cs
- WorkflowApplicationUnhandledExceptionEventArgs.cs
- LayoutTable.cs
- peersecurityelement.cs
- QueryExpr.cs
- odbcmetadatacollectionnames.cs
- WebCodeGenerator.cs
- ExpressionConverter.cs
- IsolatedStorageException.cs
- DesignerOptions.cs
- VirtualPath.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- ThreadExceptionDialog.cs
- BuildProvider.cs
- XmlReaderDelegator.cs
- Error.cs
- ListSortDescriptionCollection.cs
- RefType.cs
- TransformerInfo.cs
- SqlInternalConnection.cs
- LicenseContext.cs
- Debug.cs
- DurableOperationAttribute.cs
- ImmutablePropertyDescriptorGridEntry.cs
- FormView.cs
- NotConverter.cs
- DrawingState.cs
- CounterSampleCalculator.cs
- DataBindingExpressionBuilder.cs
- StylusLogic.cs
- _NegotiateClient.cs
- ISAPIWorkerRequest.cs
- XmlNavigatorStack.cs
- dbenumerator.cs
- ToolStripProgressBar.cs
- TemplatePropertyEntry.cs
- ListView.cs
- FormsAuthenticationUserCollection.cs
- InputBuffer.cs
- GrammarBuilderRuleRef.cs
- BinarySerializer.cs
- _IPv6Address.cs
- TextHidden.cs
- DiagnosticEventProvider.cs
- WebDescriptionAttribute.cs
- Int32.cs
- InvalidMessageContractException.cs
- UserControlDesigner.cs
- ConfigXmlAttribute.cs
- DataGridViewCellParsingEventArgs.cs
- OpCodes.cs
- XPathItem.cs
- AdapterDictionary.cs
- IPHostEntry.cs
- Contracts.cs
- UnauthorizedAccessException.cs
- InvalidStoreProtectionKeyException.cs
- ValidationErrorCollection.cs
- PropertyItem.cs
- CompatibleComparer.cs
- DateTimePicker.cs
- EditorZoneBase.cs
- SqlBuilder.cs
- TransactionManager.cs
- XmlnsDictionary.cs
- RijndaelManagedTransform.cs
- NullRuntimeConfig.cs
- ColorContext.cs
- PageThemeParser.cs
- SpecialTypeDataContract.cs