Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / ChannelBuilder.cs / 1 / ChannelBuilder.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.ServiceModel.Dispatcher; class ChannelBuilder { CustomBinding binding; BindingContext context; BindingParameterCollection bindingParameters; Uri listenUri; public ChannelBuilder(BindingContext context, bool addChannelDemuxerIfRequired) { this.context = context; if (addChannelDemuxerIfRequired) { this.AddDemuxerBindingElement(context.RemainingBindingElements); } this.binding = new CustomBinding(context.Binding, context.RemainingBindingElements); this.bindingParameters = context.BindingParameters; } public ChannelBuilder(Binding binding, BindingParameterCollection bindingParameters, bool addChannelDemuxerIfRequired) { this.binding = new CustomBinding(binding); this.bindingParameters = bindingParameters; if (addChannelDemuxerIfRequired) { this.AddDemuxerBindingElement(this.binding.Elements); } } public ChannelBuilder(ChannelBuilder channelBuilder) { this.binding = new CustomBinding(channelBuilder.Binding); this.bindingParameters = channelBuilder.BindingParameters; if (this.binding.Elements.Find() == null) { DiagnosticUtility.DebugAssert("ChannelBuilder.ctor (this.binding.Elements.Find () != null)"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperInternal(false); } } public CustomBinding Binding { get { return this.binding; } set { this.binding = value; } } public BindingParameterCollection BindingParameters { get { return this.bindingParameters; } set { this.bindingParameters = value; } } void AddDemuxerBindingElement(BindingElementCollection elements) { if (elements.Find () == null) { // add the channel demuxer binding element right above the transport TransportBindingElement transport = elements.Find (); if (transport == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.TransportBindingElementNotFound))); } // cache the context state in the demuxer so that the same context state can be provided to the transport // when building auxilliary channels and listeners (for ex, for security negotiation) elements.Insert(elements.IndexOf(transport), new ChannelDemuxerBindingElement(true)); } } public IChannelFactory BuildChannelFactory () { if (this.context != null) { IChannelFactory factory = this.context.BuildInnerChannelFactory (); this.context = null; return factory; } else { return this.binding.BuildChannelFactory (this.bindingParameters); } } public IChannelListener BuildChannelListener () where TChannel : class, IChannel { if (this.context != null) { IChannelListener listener = this.context.BuildInnerChannelListener (); this.listenUri = listener.Uri; this.context = null; return listener; } else { return this.binding.BuildChannelListener (this.listenUri, this.bindingParameters); } } public IChannelListener BuildChannelListener (MessageFilter filter, int priority) where TChannel : class, IChannel { this.bindingParameters.Add(new ChannelDemuxerFilter(filter, priority)); IChannelListener listener = this.BuildChannelListener (); this.bindingParameters.Remove (); return listener; } public bool CanBuildChannelFactory () { return this.binding.CanBuildChannelFactory (this.bindingParameters); } public bool CanBuildChannelListener () where TChannel : class, IChannel { return this.binding.CanBuildChannelListener (this.bindingParameters); } } } // 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
- BindingGroup.cs
- PropertyRecord.cs
- RequestCachePolicy.cs
- Stream.cs
- _ListenerRequestStream.cs
- CodeAccessSecurityEngine.cs
- XPathQueryGenerator.cs
- KeyInterop.cs
- TextBoxRenderer.cs
- BitmapPalette.cs
- TextCollapsingProperties.cs
- SQLUtility.cs
- BindingContext.cs
- DateRangeEvent.cs
- ObjectQuery.cs
- TextDecorationCollection.cs
- TopClause.cs
- MulticastIPAddressInformationCollection.cs
- XmlNode.cs
- ListViewUpdatedEventArgs.cs
- Decoder.cs
- CellNormalizer.cs
- AndAlso.cs
- PerfCounterSection.cs
- SchemaMerger.cs
- EventSetter.cs
- SortFieldComparer.cs
- IndexedGlyphRun.cs
- DesignerResources.cs
- Misc.cs
- EntityDataSourceDataSelectionPanel.cs
- Emitter.cs
- VBCodeProvider.cs
- ScriptResourceDefinition.cs
- __ConsoleStream.cs
- DataGridViewBand.cs
- TextBoxBase.cs
- _ListenerRequestStream.cs
- ClickablePoint.cs
- PackWebRequest.cs
- Point3DAnimationBase.cs
- PropertySegmentSerializer.cs
- CellParaClient.cs
- Util.cs
- CredentialCache.cs
- WbemProvider.cs
- Paragraph.cs
- EntityException.cs
- StatusBarItem.cs
- SectionXmlInfo.cs
- SecureEnvironment.cs
- ArgumentsParser.cs
- HtmlElementCollection.cs
- DataGridViewRowEventArgs.cs
- FrameworkContextData.cs
- ObjectToIdCache.cs
- Resources.Designer.cs
- ManagedCodeMarkers.cs
- FloaterParagraph.cs
- HtmlHead.cs
- TagPrefixInfo.cs
- InvalidProgramException.cs
- _SpnDictionary.cs
- HuffmanTree.cs
- OperationContractGenerationContext.cs
- WebPartTransformerCollection.cs
- MulticastNotSupportedException.cs
- Events.cs
- MediaPlayer.cs
- HotSpotCollection.cs
- DefaultAssemblyResolver.cs
- ScrollChrome.cs
- MemberPath.cs
- DriveNotFoundException.cs
- IIS7UserPrincipal.cs
- GenericAuthenticationEventArgs.cs
- MethodResolver.cs
- UInt16Converter.cs
- DefaultAsyncDataDispatcher.cs
- TrustManagerMoreInformation.cs
- GroupBoxAutomationPeer.cs
- CompilationLock.cs
- AnonymousIdentificationModule.cs
- IssuanceLicense.cs
- NullableBoolConverter.cs
- ProviderUtil.cs
- Journaling.cs
- ClrPerspective.cs
- DispatcherFrame.cs
- FrameworkElement.cs
- ResourceContainer.cs
- InvokeMethodDesigner.xaml.cs
- LinkArea.cs
- DataViewManager.cs
- TableCellCollection.cs
- ControlBindingsCollection.cs
- Soap12ServerProtocol.cs
- ResourcePermissionBaseEntry.cs
- XsltContext.cs
- ParseHttpDate.cs