Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / Binding.cs / 1 / Binding.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.Channels
{
using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Net.Security;
using System.ServiceModel.Channels;
public abstract class Binding : IDefaultCommunicationTimeouts
{
TimeSpan closeTimeout = ServiceDefaults.CloseTimeout;
string name;
string namespaceIdentifier;
TimeSpan openTimeout = ServiceDefaults.OpenTimeout;
TimeSpan receiveTimeout = ServiceDefaults.ReceiveTimeout;
TimeSpan sendTimeout = ServiceDefaults.SendTimeout;
internal const string DefaultNamespace = NamingHelper.DefaultNamespace;
protected Binding()
{
this.name = null;
this.namespaceIdentifier = DefaultNamespace;
}
protected Binding(string name, string ns)
{
if (string.IsNullOrEmpty(name))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("name", SR.GetString(SR.SFXBindingNameCannotBeNullOrEmpty));
}
if (ns == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("ns");
}
if (ns.Length > 0)
{
NamingHelper.CheckUriParameter(ns, "ns");
}
this.name = name;
this.namespaceIdentifier = ns;
}
public TimeSpan CloseTimeout
{
get { return this.closeTimeout; }
set
{
if (value < TimeSpan.Zero)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRange0)));
}
if (TimeoutHelper.IsTooLarge(value))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRangeTooBig)));
}
this.closeTimeout = value;
}
}
public string Name
{
get
{
if (this.name == null)
this.name = this.GetType().Name;
return this.name;
}
set
{
if (string.IsNullOrEmpty(value))
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("value", SR.GetString(SR.SFXBindingNameCannotBeNullOrEmpty));
this.name = value;
}
}
public string Namespace
{
get { return this.namespaceIdentifier; }
set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
}
if (value.Length > 0)
{
NamingHelper.CheckUriProperty(value, "Namespace");
}
this.namespaceIdentifier = value;
}
}
public TimeSpan OpenTimeout
{
get { return this.openTimeout; }
set
{
if (value < TimeSpan.Zero)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRange0)));
}
if (TimeoutHelper.IsTooLarge(value))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRangeTooBig)));
}
this.openTimeout = value;
}
}
public TimeSpan ReceiveTimeout
{
get { return this.receiveTimeout; }
set
{
if (value < TimeSpan.Zero)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRange0)));
}
if (TimeoutHelper.IsTooLarge(value))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRangeTooBig)));
}
this.receiveTimeout = value;
}
}
public abstract string Scheme { get; }
public MessageVersion MessageVersion
{
get
{
return this.GetProperty(new BindingParameterCollection());
}
}
public TimeSpan SendTimeout
{
get { return this.sendTimeout; }
set
{
if (value < TimeSpan.Zero)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRange0)));
}
if (TimeoutHelper.IsTooLarge(value))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRangeTooBig)));
}
this.sendTimeout = value;
}
}
public IChannelFactory BuildChannelFactory(params object[] parameters)
{
return this.BuildChannelFactory(new BindingParameterCollection(parameters));
}
public virtual IChannelFactory BuildChannelFactory(BindingParameterCollection parameters)
{
EnsureInvariants();
BindingContext context = new BindingContext(new CustomBinding(this), parameters);
IChannelFactory channelFactory = context.BuildInnerChannelFactory();
context.ValidateBindingElementsConsumed();
this.ValidateSecurityCapabilities(channelFactory.GetProperty(), parameters);
return channelFactory;
}
void ValidateSecurityCapabilities(ISecurityCapabilities runtimeSecurityCapabilities, BindingParameterCollection parameters)
{
ISecurityCapabilities bindingSecurityCapabilities = this.GetProperty(parameters);
if (!SecurityCapabilities.IsEqual(bindingSecurityCapabilities, runtimeSecurityCapabilities))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
new InvalidOperationException(SR.GetString(SR.SecurityCapabilitiesMismatched, this)));
}
}
public virtual IChannelListener BuildChannelListener(params object[] parameters)
where TChannel : class, IChannel
{
return this.BuildChannelListener(new BindingParameterCollection(parameters));
}
public virtual IChannelListener BuildChannelListener(Uri listenUriBaseAddress, params object[] parameters)
where TChannel : class, IChannel
{
return this.BuildChannelListener(listenUriBaseAddress, new BindingParameterCollection(parameters));
}
public virtual IChannelListener BuildChannelListener(Uri listenUriBaseAddress, string listenUriRelativeAddress, params object[] parameters)
where TChannel : class, IChannel
{
return this.BuildChannelListener(listenUriBaseAddress, listenUriRelativeAddress, new BindingParameterCollection(parameters));
}
public virtual IChannelListener BuildChannelListener(Uri listenUriBaseAddress, string listenUriRelativeAddress, ListenUriMode listenUriMode, params object[] parameters)
where TChannel : class, IChannel
{
return this.BuildChannelListener(listenUriBaseAddress, listenUriRelativeAddress, listenUriMode, new BindingParameterCollection(parameters));
}
public virtual IChannelListener BuildChannelListener(BindingParameterCollection parameters)
where TChannel : class, IChannel
{
UriBuilder listenUriBuilder = new UriBuilder(this.Scheme, DnsCache.MachineName);
return this.BuildChannelListener(listenUriBuilder.Uri, String.Empty, ListenUriMode.Unique, parameters);
}
public virtual IChannelListener BuildChannelListener(Uri listenUriBaseAddress, BindingParameterCollection parameters)
where TChannel : class, IChannel
{
return this.BuildChannelListener(listenUriBaseAddress, String.Empty, ListenUriMode.Explicit, parameters);
}
public virtual IChannelListener BuildChannelListener(Uri listenUriBaseAddress, string listenUriRelativeAddress, BindingParameterCollection parameters)
where TChannel : class, IChannel
{
return this.BuildChannelListener(listenUriBaseAddress, listenUriRelativeAddress, ListenUriMode.Explicit, parameters);
}
public virtual IChannelListener BuildChannelListener(Uri listenUriBaseAddress, string listenUriRelativeAddress, ListenUriMode listenUriMode, BindingParameterCollection parameters)
where TChannel : class, IChannel
{
EnsureInvariants();
BindingContext context = new BindingContext(new CustomBinding(this), parameters, listenUriBaseAddress, listenUriRelativeAddress, listenUriMode);
IChannelListener channelListener = context.BuildInnerChannelListener();
context.ValidateBindingElementsConsumed();
this.ValidateSecurityCapabilities(channelListener.GetProperty(), parameters);
return channelListener;
}
public bool CanBuildChannelFactory(params object[] parameters)
{
return this.CanBuildChannelFactory(new BindingParameterCollection(parameters));
}
public virtual bool CanBuildChannelFactory(BindingParameterCollection parameters)
{
BindingContext context = new BindingContext(new CustomBinding(this), parameters);
return context.CanBuildInnerChannelFactory();
}
public bool CanBuildChannelListener(params object[] parameters) where TChannel : class, IChannel
{
return this.CanBuildChannelListener(new BindingParameterCollection(parameters));
}
public virtual bool CanBuildChannelListener(BindingParameterCollection parameters) where TChannel : class, IChannel
{
BindingContext context = new BindingContext(new CustomBinding(this), parameters);
return context.CanBuildInnerChannelListener();
}
// the elements should NOT reference internal elements used by the Binding
public abstract BindingElementCollection CreateBindingElements();
public T GetProperty(BindingParameterCollection parameters)
where T : class
{
BindingContext context = new BindingContext(new CustomBinding(this), parameters);
return context.GetInnerProperty();
}
void EnsureInvariants()
{
EnsureInvariants(null);
}
internal void EnsureInvariants(string contractName)
{
BindingElementCollection elements = this.CreateBindingElements();
TransportBindingElement transport = null;
int index;
for (index = 0; index < elements.Count; index++)
{
transport = elements[index] as TransportBindingElement;
if (transport != null)
break;
}
if (transport == null)
{
if (contractName == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
SR.GetString(SR.CustomBindingRequiresTransport, this.Name)));
}
else
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
SR.GetString(SR.SFxCustomBindingNeedsTransport1, contractName)));
}
}
if (index != elements.Count - 1)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
SR.GetString(SR.TransportBindingElementMustBeLast, this.Name, transport.GetType().Name)));
}
if (string.IsNullOrEmpty(transport.Scheme))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
SR.GetString(SR.InvalidBindingScheme, transport.GetType().Name)));
}
if (this.MessageVersion == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
SR.GetString(SR.MessageVersionMissingFromBinding, this.Name)));
}
}
internal void CopyTimeouts(IDefaultCommunicationTimeouts source)
{
this.CloseTimeout = source.CloseTimeout;
this.OpenTimeout = source.OpenTimeout;
this.ReceiveTimeout = source.ReceiveTimeout;
this.SendTimeout = source.SendTimeout;
}
}
}
// 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
- ComboBoxRenderer.cs
- wmiutil.cs
- ParseNumbers.cs
- PresentationSource.cs
- Knowncolors.cs
- TraceContext.cs
- Common.cs
- FilterableData.cs
- clipboard.cs
- ErrorFormatterPage.cs
- SystemColors.cs
- BrowserTree.cs
- SoapFormatter.cs
- TextMarkerSource.cs
- NullableFloatAverageAggregationOperator.cs
- StrokeNodeOperations2.cs
- RecognizerBase.cs
- DefaultAuthorizationContext.cs
- MultipleCopiesCollection.cs
- RequiredFieldValidator.cs
- DataGridComponentEditor.cs
- QilSortKey.cs
- TimeStampChecker.cs
- FileEnumerator.cs
- ServiceManager.cs
- FontStyleConverter.cs
- Evidence.cs
- ExpressionBuilder.cs
- SchemaElementLookUpTableEnumerator.cs
- HtmlElementEventArgs.cs
- StringOutput.cs
- VariableAction.cs
- EntityDesignerDataSourceView.cs
- SimpleWorkerRequest.cs
- DataBoundLiteralControl.cs
- RectAnimation.cs
- Encoder.cs
- DetailsViewCommandEventArgs.cs
- DataControlFieldHeaderCell.cs
- StructuralType.cs
- StrokeDescriptor.cs
- XsdCachingReader.cs
- KeyConstraint.cs
- FunctionCommandText.cs
- UnorderedHashRepartitionStream.cs
- CodeTypeOfExpression.cs
- UriTemplatePathSegment.cs
- ExpressionDumper.cs
- RegexNode.cs
- CallSite.cs
- InfocardClientCredentials.cs
- ViewGenResults.cs
- X509ThumbprintKeyIdentifierClause.cs
- XmlSchemaIdentityConstraint.cs
- GraphicsState.cs
- FormsAuthenticationConfiguration.cs
- ListMarkerLine.cs
- DataGridViewSelectedCellCollection.cs
- TargetControlTypeCache.cs
- XmlSchemaProviderAttribute.cs
- TreeNodeStyleCollection.cs
- DataRow.cs
- CodePageUtils.cs
- HtmlInputSubmit.cs
- NameTable.cs
- OdbcConnectionStringbuilder.cs
- TableCellAutomationPeer.cs
- OdbcConnectionPoolProviderInfo.cs
- PrimitiveXmlSerializers.cs
- WmpBitmapEncoder.cs
- GridItemProviderWrapper.cs
- XmlSchemaAny.cs
- CryptoApi.cs
- StorageEntitySetMapping.cs
- securitycriticaldata.cs
- GregorianCalendarHelper.cs
- XmlSchemaAttributeGroup.cs
- Shape.cs
- SelectorAutomationPeer.cs
- NetworkStream.cs
- StrokeNodeOperations2.cs
- FormsAuthenticationTicket.cs
- BinaryParser.cs
- DataStreamFromComStream.cs
- CompiledRegexRunner.cs
- HttpsHostedTransportConfiguration.cs
- Attributes.cs
- Main.cs
- InputElement.cs
- PropertyRef.cs
- IndexOutOfRangeException.cs
- SmiEventSink.cs
- PrtCap_Base.cs
- TransactedBatchingElement.cs
- Stroke2.cs
- Encoder.cs
- PropertyEmitterBase.cs
- FilterQuery.cs
- FlowDocumentPaginator.cs
- GridViewSelectEventArgs.cs