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
- DuplicateWaitObjectException.cs
- CodeMemberEvent.cs
- TileBrush.cs
- XamlReaderHelper.cs
- ByteConverter.cs
- EventListener.cs
- Table.cs
- Expressions.cs
- _CacheStreams.cs
- RestHandler.cs
- SecurityElement.cs
- XPathSelectionIterator.cs
- ImageListUtils.cs
- ControlPropertyNameConverter.cs
- OperandQuery.cs
- PagedDataSource.cs
- DesignTimeParseData.cs
- Font.cs
- ParameterElementCollection.cs
- TargetControlTypeCache.cs
- Inline.cs
- DataGridViewRowStateChangedEventArgs.cs
- WebServiceReceive.cs
- DataGridViewTextBoxEditingControl.cs
- APCustomTypeDescriptor.cs
- FixedSOMTable.cs
- DocumentGrid.cs
- ScrollEventArgs.cs
- CngUIPolicy.cs
- BitmapPalette.cs
- MultilineStringConverter.cs
- XsltArgumentList.cs
- ObjectDataSourceMethodEventArgs.cs
- OrderedEnumerableRowCollection.cs
- DropShadowEffect.cs
- SafeCryptoHandles.cs
- wgx_render.cs
- codemethodreferenceexpression.cs
- NumericPagerField.cs
- ImageAnimator.cs
- Socket.cs
- InstanceCollisionException.cs
- HtmlInputFile.cs
- DataBinder.cs
- QueueProcessor.cs
- EdmEntityTypeAttribute.cs
- RuleProcessor.cs
- DataTableMapping.cs
- UInt16Converter.cs
- NumberFormatInfo.cs
- RegistryKey.cs
- DefaultParameterValueAttribute.cs
- PageContentCollection.cs
- ToolStripRendererSwitcher.cs
- ListViewGroupCollectionEditor.cs
- StrongNameSignatureInformation.cs
- DurableDispatcherAddressingFault.cs
- XmlQueryTypeFactory.cs
- FakeModelItemImpl.cs
- PagesSection.cs
- FunctionImportMapping.cs
- PerformanceCounterPermissionEntry.cs
- ServiceReflector.cs
- EmptyEnumerator.cs
- QueryResults.cs
- SelectionRangeConverter.cs
- GPPOINTF.cs
- ConfigurationValue.cs
- GenericWebPart.cs
- PointConverter.cs
- DataSourceViewSchemaConverter.cs
- MimeFormatExtensions.cs
- CellTreeNode.cs
- StorageComplexPropertyMapping.cs
- KnownBoxes.cs
- DetailsViewDeleteEventArgs.cs
- xsdvalidator.cs
- NetworkInterface.cs
- CodeAccessPermission.cs
- EntityStoreSchemaFilterEntry.cs
- EnumType.cs
- RowsCopiedEventArgs.cs
- NetworkInformationPermission.cs
- InfocardChannelParameter.cs
- XmlNodeChangedEventArgs.cs
- XhtmlBasicCalendarAdapter.cs
- Debug.cs
- SqlNotificationEventArgs.cs
- StructuredType.cs
- RelationshipEndCollection.cs
- WebBrowser.cs
- DataControlButton.cs
- LocalizationComments.cs
- BlockCollection.cs
- TextServicesProperty.cs
- BasePattern.cs
- ComPlusDiagnosticTraceRecords.cs
- SignatureHelper.cs
- UnsafeNativeMethods.cs
- SrgsDocument.cs