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
- SoapMessage.cs
- CalendarTable.cs
- ServiceModelConfigurationSectionGroup.cs
- ToolStripDropDownClosingEventArgs.cs
- SchemaNotation.cs
- _OverlappedAsyncResult.cs
- UrlAuthorizationModule.cs
- EncodingNLS.cs
- XhtmlBasicImageAdapter.cs
- CommandID.cs
- cache.cs
- XdrBuilder.cs
- SequentialOutput.cs
- StylusTip.cs
- ComponentEditorForm.cs
- CryptoProvider.cs
- LogPolicy.cs
- XmlSchemaSearchPattern.cs
- DrawingGroup.cs
- QilList.cs
- SymLanguageVendor.cs
- PickDesigner.xaml.cs
- ObjectKeyFrameCollection.cs
- ChineseLunisolarCalendar.cs
- initElementDictionary.cs
- Header.cs
- CodeMemberEvent.cs
- EntityContainerEntitySet.cs
- AdornerDecorator.cs
- InvokeProviderWrapper.cs
- SystemSounds.cs
- OuterGlowBitmapEffect.cs
- Frame.cs
- Splitter.cs
- SafePointer.cs
- ScrollChangedEventArgs.cs
- securestring.cs
- ButtonChrome.cs
- _AutoWebProxyScriptHelper.cs
- WorkflowInspectionServices.cs
- EventSchemaTraceListener.cs
- MouseGesture.cs
- ImageFormat.cs
- HMACSHA512.cs
- Freezable.cs
- MessageBox.cs
- InteropTrackingRecord.cs
- XmlName.cs
- DataServicePagingProviderWrapper.cs
- StructuredProperty.cs
- Scripts.cs
- DataGridViewRowHeaderCell.cs
- DataColumnChangeEvent.cs
- HtmlTitle.cs
- WindowsIPAddress.cs
- SQLStringStorage.cs
- XmlChildNodes.cs
- PeerNameRegistration.cs
- ITextView.cs
- MachinePropertyVariants.cs
- EnumUnknown.cs
- ProfileSection.cs
- SynchronousChannel.cs
- TypeSystem.cs
- MobileControlPersister.cs
- DataGridViewAutoSizeModeEventArgs.cs
- WindowsStartMenu.cs
- NameValueFileSectionHandler.cs
- ColorKeyFrameCollection.cs
- ProgressBarRenderer.cs
- InternalConfigConfigurationFactory.cs
- HostVisual.cs
- UrlPath.cs
- LinqDataSourceDisposeEventArgs.cs
- BindToObject.cs
- Properties.cs
- ExpressionPrinter.cs
- SynchronizingStream.cs
- WebBaseEventKeyComparer.cs
- EventToken.cs
- HttpContextServiceHost.cs
- ViewGenerator.cs
- Stopwatch.cs
- HttpModuleAction.cs
- UrlRoutingModule.cs
- DynamicRendererThreadManager.cs
- InkSerializer.cs
- CurrentTimeZone.cs
- SafeRightsManagementHandle.cs
- XmlReader.cs
- NativeCppClassAttribute.cs
- WorkflowEnvironment.cs
- ProxyGenerator.cs
- ToolStripContainer.cs
- CellParaClient.cs
- PropertyChangedEventManager.cs
- sqlstateclientmanager.cs
- FlowLayout.cs
- webeventbuffer.cs
- TypeContext.cs