Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / InternalDuplexBindingElement.cs / 1 / InternalDuplexBindingElement.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.Runtime.Serialization; using System.Xml; using System.ServiceModel.Security; using System.ServiceModel.Dispatcher; sealed class InternalDuplexBindingElement : BindingElement { InputChannelDemuxer clientChannelDemuxer; bool providesCorrelation; public InternalDuplexBindingElement() : this(false) { } // internal InternalDuplexBindingElement(bool providesCorrelation) : base() { this.providesCorrelation = providesCorrelation; } InternalDuplexBindingElement(InternalDuplexBindingElement elementToBeCloned) : base(elementToBeCloned) { this.clientChannelDemuxer = elementToBeCloned.ClientChannelDemuxer; this.providesCorrelation = elementToBeCloned.ProvidesCorrelation; } internal InputChannelDemuxer ClientChannelDemuxer { get { return this.clientChannelDemuxer; } } internal bool ProvidesCorrelation { get { return this.providesCorrelation; } } public override BindingElement Clone() { return new InternalDuplexBindingElement(this); } public override IChannelFactoryBuildChannelFactory (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (!this.CanBuildChannelFactory (context)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument( "TChannel", SR.GetString(SR.ChannelTypeNotSupported, typeof(TChannel))); } IChannelFactory innerChannelFactory = context.Clone().BuildInnerChannelFactory (); if (this.clientChannelDemuxer == null) { this.clientChannelDemuxer = new InputChannelDemuxer(context); } else { #pragma warning suppress 56506 // [....], context.RemainingBindingElements will never be null context.RemainingBindingElements.Clear(); } LocalAddressProvider localAddressProvider = context.BindingParameters.Remove (); return (IChannelFactory )(object) new InternalDuplexChannelFactory(this, context, this.clientChannelDemuxer, innerChannelFactory, localAddressProvider); } public override IChannelListener BuildChannelListener (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (typeof(TChannel) != typeof(IDuplexChannel)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("TChannel", SR.GetString(SR.ChannelTypeNotSupported, typeof(TChannel))); } return (IChannelListener )(object)new InternalDuplexChannelListener(this, context); } public override bool CanBuildChannelFactory (BindingContext context) { if (context == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); return typeof(TChannel) == typeof(IDuplexChannel) && context.CanBuildInnerChannelFactory () && context.CanBuildInnerChannelListener (); } public override bool CanBuildChannelListener (BindingContext context) { if (context == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); return typeof(TChannel) == typeof(IDuplexChannel) && context.CanBuildInnerChannelFactory () && context.CanBuildInnerChannelListener (); } internal static T GetSecurityCapabilities (ISecurityCapabilities lowerCapabilities) { DiagnosticUtility.DebugAssert(typeof(T) == typeof(ISecurityCapabilities), "Can only be used with ISecurityCapabilities"); if (lowerCapabilities != null) { // composite duplex cannot ensure that messages it receives are from the part it sends // messages to. So it cannot offer server auth return (T)(object)(new SecurityCapabilities(lowerCapabilities.SupportsClientAuthentication, false, lowerCapabilities.SupportsClientWindowsIdentity, lowerCapabilities.SupportedRequestProtectionLevel, System.Net.Security.ProtectionLevel.None)); } else { return (T)(object)null; } } public override T GetProperty (BindingContext context) { if (typeof(T) == typeof(ISecurityCapabilities) && !this.ProvidesCorrelation) { return InternalDuplexBindingElement.GetSecurityCapabilities (context.GetInnerProperty ()); } else { return context.GetInnerProperty (); } } internal override bool IsMatch(BindingElement b) { if (b == null) return false; return (b is InternalDuplexBindingElement); } public static void AddDuplexFactorySupport(BindingContext context, ref InternalDuplexBindingElement internalDuplexBindingElement) { if (context.CanBuildInnerChannelFactory ()) return; if (context.RemainingBindingElements.Find () == null) return; if (context.CanBuildInnerChannelFactory () && context.CanBuildInnerChannelListener ()) { if (context.CanBuildInnerChannelFactory ()) return; if (context.CanBuildInnerChannelFactory ()) return; if (context.CanBuildInnerChannelFactory ()) return; if (context.CanBuildInnerChannelFactory ()) return; if (internalDuplexBindingElement == null) internalDuplexBindingElement = new InternalDuplexBindingElement(); context.RemainingBindingElements.Insert(0, internalDuplexBindingElement); } } public static void AddDuplexListenerSupport(BindingContext context, ref InternalDuplexBindingElement internalDuplexBindingElement) { if (context.CanBuildInnerChannelListener ()) return; if (context.RemainingBindingElements.Find () == null) return; if (context.CanBuildInnerChannelFactory () && context.CanBuildInnerChannelListener ()) { if (context.CanBuildInnerChannelListener ()) return; if (context.CanBuildInnerChannelListener ()) return; if (context.CanBuildInnerChannelListener ()) return; if (context.CanBuildInnerChannelListener ()) return; if (internalDuplexBindingElement == null) internalDuplexBindingElement = new InternalDuplexBindingElement(); context.RemainingBindingElements.Insert(0, internalDuplexBindingElement); } } public static void AddDuplexListenerSupport(CustomBinding binding, ref InternalDuplexBindingElement internalDuplexBindingElement) { if (binding.CanBuildChannelListener ()) return; if (binding.Elements.Find () == null) return; if (binding.CanBuildChannelFactory () && binding.CanBuildChannelListener ()) { if (binding.CanBuildChannelListener ()) return; if (binding.CanBuildChannelListener ()) return; if (binding.CanBuildChannelListener ()) return; if (binding.CanBuildChannelListener ()) return; if (internalDuplexBindingElement == null) internalDuplexBindingElement = new InternalDuplexBindingElement(); binding.Elements.Insert(0, internalDuplexBindingElement); } } } class LocalAddressProvider { EndpointAddress localAddress; MessageFilter filter; int priority; public LocalAddressProvider(EndpointAddress localAddress, MessageFilter filter) { if (localAddress == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("localAddress"); } if (filter == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter"); } this.localAddress = localAddress; this.filter = filter; if (localAddress.Headers.FindHeader(XD.UtilityDictionary.UniqueEndpointHeaderName.Value, XD.UtilityDictionary.UniqueEndpointHeaderNamespace.Value) == null) { this.priority = Int32.MaxValue - 1; } else { this.priority = Int32.MaxValue; } } public EndpointAddress LocalAddress { get { return this.localAddress; } } public MessageFilter Filter { get { return this.filter; } } public int Priority { get { return this.priority; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ResXResourceSet.cs
- COM2PictureConverter.cs
- ResourceManager.cs
- SessionState.cs
- ControlOperationInvoker.cs
- HierarchicalDataSourceControl.cs
- UserControlCodeDomTreeGenerator.cs
- DictionaryCustomTypeDescriptor.cs
- GeneralTransform3D.cs
- MeasureItemEvent.cs
- xmlfixedPageInfo.cs
- ProgressBarBrushConverter.cs
- GridViewColumnHeaderAutomationPeer.cs
- TripleDESCryptoServiceProvider.cs
- WorkflowInvoker.cs
- DataServiceResponse.cs
- SoapParser.cs
- Literal.cs
- CurrentChangingEventArgs.cs
- ZipIOCentralDirectoryBlock.cs
- ByteAnimationBase.cs
- SignedXml.cs
- DataSourceDesigner.cs
- ArrayWithOffset.cs
- ParagraphVisual.cs
- ValidationPropertyAttribute.cs
- ComponentRenameEvent.cs
- TypeUtils.cs
- ZipIOModeEnforcingStream.cs
- DataTableTypeConverter.cs
- EnumerableValidator.cs
- KeyGestureValueSerializer.cs
- SponsorHelper.cs
- mediaeventargs.cs
- TypeBrowser.xaml.cs
- CollectionBase.cs
- KeyInfo.cs
- SHA1.cs
- UpdateEventArgs.cs
- ExpressionHelper.cs
- BeginGetFileNameFromUserRequest.cs
- Input.cs
- GeometryModel3D.cs
- QuaternionValueSerializer.cs
- NativeRightsManagementAPIsStructures.cs
- TextFormatterImp.cs
- ConfigXmlText.cs
- GCHandleCookieTable.cs
- DataBoundLiteralControl.cs
- BufferedGraphicsContext.cs
- DocumentOrderComparer.cs
- DecoderBestFitFallback.cs
- EnglishPluralizationService.cs
- NegationPusher.cs
- EmbeddedMailObject.cs
- OdbcReferenceCollection.cs
- Constraint.cs
- UnsafeNativeMethods.cs
- ProviderCollection.cs
- X509Extension.cs
- DataGridViewColumnConverter.cs
- SudsWriter.cs
- ListCollectionView.cs
- DispatcherSynchronizationContext.cs
- ZipPackagePart.cs
- HttpException.cs
- XmlSerializer.cs
- BamlLocalizabilityResolver.cs
- StatusBarDrawItemEvent.cs
- TableCellCollection.cs
- RandomNumberGenerator.cs
- BamlReader.cs
- ToolStripSettings.cs
- HotCommands.cs
- SqlRetyper.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- OdbcStatementHandle.cs
- Pair.cs
- RoleExceptions.cs
- QilLiteral.cs
- NetMsmqSecurity.cs
- HostedTransportConfigurationBase.cs
- SetterBaseCollection.cs
- TypeListConverter.cs
- ToolStripDropDown.cs
- CodeCompiler.cs
- GroupStyle.cs
- TraceHandler.cs
- DataContractSerializerOperationFormatter.cs
- EventProviderTraceListener.cs
- WorkflowMessageEventHandler.cs
- CodeGotoStatement.cs
- ToolStripArrowRenderEventArgs.cs
- DictionaryChange.cs
- xsdvalidator.cs
- JapaneseCalendar.cs
- SqlDataSourceConfigureSelectPanel.cs
- MergeLocalizationDirectives.cs
- TextElementCollection.cs
- SymmetricSecurityBindingElement.cs