Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / BindingContext.cs / 1 / BindingContext.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.Channels
{
using System.ServiceModel.Description;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Text;
public class BindingContext
{
CustomBinding binding;
BindingParameterCollection bindingParameters;
Uri listenUriBaseAddress;
ListenUriMode listenUriMode;
string listenUriRelativeAddress;
BindingElementCollection remainingBindingElements; // kept to ensure each BE builds itself once
public BindingContext(CustomBinding binding, BindingParameterCollection parameters)
: this(binding, parameters, null, string.Empty, ListenUriMode.Explicit)
{
}
public BindingContext(CustomBinding binding, BindingParameterCollection parameters, Uri listenUriBaseAddress, string listenUriRelativeAddress, ListenUriMode listenUriMode)
{
if (binding == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("binding");
}
if (listenUriRelativeAddress == null)
{
listenUriRelativeAddress = string.Empty;
}
if (!ListenUriModeHelper.IsDefined(listenUriMode))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("listenUriMode"));
}
Initialize(binding, binding.Elements, parameters, listenUriBaseAddress, listenUriRelativeAddress, listenUriMode);
}
BindingContext(CustomBinding binding,
BindingElementCollection remainingBindingElements,
BindingParameterCollection parameters,
Uri listenUriBaseAddress,
string listenUriRelativeAddress,
ListenUriMode listenUriMode)
{
Initialize(binding, remainingBindingElements, parameters, listenUriBaseAddress, listenUriRelativeAddress, listenUriMode);
}
void Initialize(CustomBinding binding,
BindingElementCollection remainingBindingElements,
BindingParameterCollection parameters,
Uri listenUriBaseAddress,
string listenUriRelativeAddress,
ListenUriMode listenUriMode)
{
this.binding = binding;
this.remainingBindingElements = new BindingElementCollection(remainingBindingElements);
this.bindingParameters = new BindingParameterCollection(parameters);
this.listenUriBaseAddress = listenUriBaseAddress;
this.listenUriRelativeAddress = listenUriRelativeAddress;
this.listenUriMode = listenUriMode;
}
public CustomBinding Binding
{
get { return this.binding; }
}
public BindingParameterCollection BindingParameters
{
get { return this.bindingParameters; }
}
public Uri ListenUriBaseAddress
{
get { return this.listenUriBaseAddress; }
set { this.listenUriBaseAddress = value; }
}
public ListenUriMode ListenUriMode
{
get { return this.listenUriMode; }
set { this.listenUriMode = value; }
}
public string ListenUriRelativeAddress
{
get { return this.listenUriRelativeAddress; }
set { this.listenUriRelativeAddress = value; }
}
public BindingElementCollection RemainingBindingElements
{
get { return this.remainingBindingElements; }
}
public IChannelFactory BuildInnerChannelFactory()
{
return this.RemoveNextElement().BuildChannelFactory(this);
}
public IChannelListener BuildInnerChannelListener()
where TChannel : class, IChannel
{
return this.RemoveNextElement().BuildChannelListener(this);
}
public bool CanBuildInnerChannelFactory()
{
BindingContext clone = this.Clone();
return clone.RemoveNextElement().CanBuildChannelFactory(clone);
}
public bool CanBuildInnerChannelListener()
where TChannel : class, IChannel
{
BindingContext clone = this.Clone();
return clone.RemoveNextElement().CanBuildChannelListener(clone);
}
public T GetInnerProperty()
where T : class
{
if (this.remainingBindingElements.Count == 0)
{
return null;
}
else
{
BindingContext clone = this.Clone();
return clone.RemoveNextElement().GetProperty(clone);
}
}
public BindingContext Clone()
{
return new BindingContext(this.binding, this.remainingBindingElements, this.bindingParameters,
this.listenUriBaseAddress, this.listenUriRelativeAddress, this.listenUriMode);
}
BindingElement RemoveNextElement()
{
BindingElement element = this.remainingBindingElements.Remove();
if (element != null)
return element;
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(
SR.NoChannelBuilderAvailable, this.binding.Name, this.binding.Namespace)));
}
internal void ValidateBindingElementsConsumed()
{
if (this.RemainingBindingElements.Count != 0)
{
StringBuilder builder = new StringBuilder();
foreach (BindingElement bindingElement in this.RemainingBindingElements)
{
if (builder.Length > 0)
{
builder.Append(CultureInfo.CurrentCulture.TextInfo.ListSeparator);
builder.Append(" ");
}
string typeString = bindingElement.GetType().ToString();
builder.Append(typeString.Substring(typeString.LastIndexOf('.') + 1));
}
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.NotAllBindingElementsBuilt, builder.ToString())));
}
}
}
}
// 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
- GuidelineCollection.cs
- WebPartDeleteVerb.cs
- ValidatingReaderNodeData.cs
- DoubleLinkList.cs
- TemplatedAdorner.cs
- MultiByteCodec.cs
- PingOptions.cs
- WaitHandle.cs
- ColorConverter.cs
- TextUtf8RawTextWriter.cs
- TargetFrameworkAttribute.cs
- TypeDescriptionProvider.cs
- EdmTypeAttribute.cs
- CompositeActivityTypeDescriptorProvider.cs
- ProcessModelSection.cs
- HyperLinkColumn.cs
- SqlClientMetaDataCollectionNames.cs
- DataProtection.cs
- COM2PropertyBuilderUITypeEditor.cs
- SqlCommandAsyncResult.cs
- InputLanguageCollection.cs
- WebPartTransformer.cs
- NamedPipeProcessProtocolHandler.cs
- RealizationDrawingContextWalker.cs
- PostBackOptions.cs
- ComponentChangingEvent.cs
- ListView.cs
- PropertyGridEditorPart.cs
- WebBrowsableAttribute.cs
- Transform.cs
- BinaryWriter.cs
- MdImport.cs
- HighContrastHelper.cs
- ResourceDescriptionAttribute.cs
- DeclaredTypeValidator.cs
- TdsParserSessionPool.cs
- FileSecurity.cs
- IconConverter.cs
- DbDeleteCommandTree.cs
- XmlHierarchicalEnumerable.cs
- PostBackOptions.cs
- XmlSchemaAnnotation.cs
- DynamicDataManager.cs
- XmlArrayItemAttributes.cs
- DataListCommandEventArgs.cs
- OutputCacheProfileCollection.cs
- ConstraintStruct.cs
- ScaleTransform.cs
- LabelTarget.cs
- CellCreator.cs
- MDIClient.cs
- CharUnicodeInfo.cs
- MsmqInputChannel.cs
- BeginStoryboard.cs
- webclient.cs
- ContextQuery.cs
- PropertyTab.cs
- DataSetMappper.cs
- FloatAverageAggregationOperator.cs
- EventLogInformation.cs
- Calendar.cs
- ParameterCollection.cs
- NamespaceList.cs
- PersonalizableAttribute.cs
- RtfToXamlLexer.cs
- DataGridViewRowHeaderCell.cs
- XmlSerializerAssemblyAttribute.cs
- Operators.cs
- LogWriteRestartAreaState.cs
- CacheMemory.cs
- UTF32Encoding.cs
- Polygon.cs
- PageSettings.cs
- SortFieldComparer.cs
- TypeToStringValueConverter.cs
- ObjectTokenCategory.cs
- DataGridViewCellConverter.cs
- Stackframe.cs
- NetNamedPipeSecurity.cs
- autovalidator.cs
- DataGridViewComboBoxEditingControl.cs
- DistributedTransactionPermission.cs
- XamlStream.cs
- ChunkedMemoryStream.cs
- PackagingUtilities.cs
- EnumUnknown.cs
- TableColumn.cs
- TableLayoutPanelCodeDomSerializer.cs
- EmptyWorkItem.cs
- MemberCollection.cs
- SqlServer2KCompatibilityAnnotation.cs
- MergePropertyDescriptor.cs
- XmlIterators.cs
- CounterSample.cs
- TracedNativeMethods.cs
- DetailsViewPagerRow.cs
- WebHttpSecurity.cs
- WebServiceEnumData.cs
- RepeatButton.cs
- NamespaceInfo.cs