Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / ChannelFactoryBase.cs / 1 / ChannelFactoryBase.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.ServiceModel; using System.ServiceModel.Dispatcher; using System.Diagnostics; using System.IO; using System.Runtime.Serialization; using System.ServiceModel.Diagnostics; using System.Text; using System.Threading; public abstract class ChannelFactoryBase : ChannelManagerBase, IChannelFactory { TimeSpan closeTimeout = ServiceDefaults.CloseTimeout; TimeSpan openTimeout = ServiceDefaults.OpenTimeout; TimeSpan receiveTimeout = ServiceDefaults.ReceiveTimeout; TimeSpan sendTimeout = ServiceDefaults.SendTimeout; protected ChannelFactoryBase() { } protected ChannelFactoryBase(IDefaultCommunicationTimeouts timeouts) { this.InitializeTimeouts(timeouts); } protected override TimeSpan DefaultCloseTimeout { get { return this.closeTimeout; } } protected override TimeSpan DefaultOpenTimeout { get { return this.openTimeout; } } protected override TimeSpan DefaultReceiveTimeout { get { return this.receiveTimeout; } } protected override TimeSpan DefaultSendTimeout { get { return this.sendTimeout; } } public virtual T GetProperty() where T : class { if (typeof(T) == typeof(IChannelFactory)) { return (T)(object)this; } return default(T); } protected override void OnAbort() { } protected override IAsyncResult OnBeginClose(TimeSpan timeout, AsyncCallback callback, object state) { return new CompletedAsyncResult(callback, state); } protected override void OnClose(TimeSpan timeout) { } protected override void OnEndClose(IAsyncResult result) { CompletedAsyncResult.End(result); } void InitializeTimeouts(IDefaultCommunicationTimeouts timeouts) { if (timeouts != null) { this.closeTimeout = timeouts.CloseTimeout; this.openTimeout = timeouts.OpenTimeout; this.receiveTimeout = timeouts.ReceiveTimeout; this.sendTimeout = timeouts.SendTimeout; } } } public abstract class ChannelFactoryBase : ChannelFactoryBase, IChannelFactory { CommunicationObjectManager channels; protected ChannelFactoryBase() : this(null) { } protected ChannelFactoryBase(IDefaultCommunicationTimeouts timeouts) : base(timeouts) { this.channels = new CommunicationObjectManager (this.ThisLock); } public TChannel CreateChannel(EndpointAddress address) { if (address == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("address"); return this.InternalCreateChannel(address, address.Uri); } public TChannel CreateChannel(EndpointAddress address, Uri via) { if (address == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("address"); if (via == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("via"); return this.InternalCreateChannel(address, via); } TChannel InternalCreateChannel(EndpointAddress address, Uri via) { this.ValidateCreateChannel(); TChannel channel = this.OnCreateChannel(address, via); bool success = false; try { this.channels.Add((IChannel)(object)channel); success = true; } finally { if (!success) ((IChannel)(object)channel).Abort(); } return channel; } protected abstract TChannel OnCreateChannel(EndpointAddress address, Uri via); protected void ValidateCreateChannel() { ThrowIfDisposed(); if (this.State != CommunicationState.Opened) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.ChannelFactoryCannotBeUsedToCreateChannels, this.GetType().ToString()))); } } protected override void OnAbort() { IChannel[] currentChannels = this.channels.ToArray(); foreach (IChannel channel in currentChannels) channel.Abort(); this.channels.Abort(); } protected override void OnClose(TimeSpan timeout) { IChannel[] currentChannels = this.channels.ToArray(); TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); foreach (IChannel channel in currentChannels) channel.Close(timeoutHelper.RemainingTime()); this.channels.Close(timeoutHelper.RemainingTime()); } protected override IAsyncResult OnBeginClose(TimeSpan timeout, AsyncCallback callback, object state) { return new ChainedCloseAsyncResult(timeout, callback, state, this.channels.BeginClose, this.channels.EndClose, this.channels.ToArray()); } protected override void OnEndClose(IAsyncResult result) { ChainedCloseAsyncResult.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
- ObjectQueryProvider.cs
- StylusPointProperty.cs
- PointUtil.cs
- EventTrigger.cs
- Function.cs
- IndexedString.cs
- XmlChildNodes.cs
- FormsAuthenticationUser.cs
- ReliabilityContractAttribute.cs
- NamedPipeDuplicateContext.cs
- XmlUtilWriter.cs
- PrtTicket_Public.cs
- LogEntryUtils.cs
- CompositionAdorner.cs
- CssTextWriter.cs
- InstanceNormalEvent.cs
- OperationGenerator.cs
- ProfilePropertyMetadata.cs
- DocumentPageTextView.cs
- ProxyManager.cs
- EntityTypeEmitter.cs
- StreamMarshaler.cs
- DoWorkEventArgs.cs
- FaultDesigner.cs
- ProxyWebPart.cs
- DeadLetterQueue.cs
- EmbeddedMailObjectsCollection.cs
- ApplicationException.cs
- CodeDirectionExpression.cs
- DisplayMemberTemplateSelector.cs
- MultipartIdentifier.cs
- AddressAlreadyInUseException.cs
- BindingValueChangedEventArgs.cs
- BaseValidator.cs
- StreamSecurityUpgradeProvider.cs
- SqlAliasesReferenced.cs
- BinHexDecoder.cs
- Monitor.cs
- TickBar.cs
- DataView.cs
- TreeNodeCollection.cs
- SchemaInfo.cs
- CodeDomSerializerException.cs
- CompiledQuery.cs
- FreezableCollection.cs
- PrivilegeNotHeldException.cs
- AsymmetricCryptoHandle.cs
- SmtpReplyReaderFactory.cs
- TableNameAttribute.cs
- ApplicationTrust.cs
- ACL.cs
- WorkflowRuntimeServiceElement.cs
- GridItemCollection.cs
- BitmapCodecInfoInternal.cs
- EmbeddedMailObject.cs
- DataGridViewCellParsingEventArgs.cs
- HtmlTernaryTree.cs
- MasterPageParser.cs
- TreeViewTemplateSelector.cs
- _IPv6Address.cs
- Style.cs
- ManipulationVelocities.cs
- ExceptionCollection.cs
- SchemaManager.cs
- CheckBoxFlatAdapter.cs
- TcpChannelHelper.cs
- DateTimeSerializationSection.cs
- EdmItemError.cs
- BezierSegment.cs
- SimpleBitVector32.cs
- TableLayoutSettings.cs
- FocusChangedEventArgs.cs
- DataGridViewSelectedRowCollection.cs
- FileLevelControlBuilderAttribute.cs
- InitializerFacet.cs
- SectionInput.cs
- ButtonStandardAdapter.cs
- DocumentOrderComparer.cs
- FileIOPermission.cs
- SystemInformation.cs
- DataGridViewAccessibleObject.cs
- HebrewCalendar.cs
- EventToken.cs
- ObjectDataSourceStatusEventArgs.cs
- UnicastIPAddressInformationCollection.cs
- LocalizabilityAttribute.cs
- Configuration.cs
- TreeViewItemAutomationPeer.cs
- DataError.cs
- DesignerActionItemCollection.cs
- GridViewCommandEventArgs.cs
- SiteMapSection.cs
- BindingContext.cs
- WebPartManagerInternals.cs
- NativeBuffer.cs
- Events.cs
- SymmetricAlgorithm.cs
- AncestorChangedEventArgs.cs
- AsyncOperationContext.cs
- CollectionConverter.cs