Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / CompositeDuplexBindingElement.cs / 1 / CompositeDuplexBindingElement.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.ServiceModel; using System.Runtime.Serialization; using System.Xml; using System.ServiceModel.Description; using System.ServiceModel.Security; public sealed class CompositeDuplexBindingElement : BindingElement, IPolicyExportExtension { Uri clientBaseAddress; public CompositeDuplexBindingElement() { } CompositeDuplexBindingElement(CompositeDuplexBindingElement elementToBeCloned) : base(elementToBeCloned) { this.clientBaseAddress = elementToBeCloned.ClientBaseAddress; } public Uri ClientBaseAddress { get { return this.clientBaseAddress; } set { this.clientBaseAddress = value; } } public override BindingElement Clone() { return new CompositeDuplexBindingElement(this); } public override IChannelFactoryBuildChannelFactory (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (typeof(TChannel) != typeof(IOutputChannel)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("TChannel", SR.GetString(SR.ChannelTypeNotSupported, typeof(TChannel))); } return context.BuildInnerChannelFactory (); } public override IChannelListener BuildChannelListener (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (typeof(TChannel) != typeof(IInputChannel)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("TChannel", SR.GetString(SR.ChannelTypeNotSupported, typeof(TChannel))); } if (context.ListenUriBaseAddress == null) { if (this.clientBaseAddress != null) { context.ListenUriBaseAddress = this.clientBaseAddress; context.ListenUriRelativeAddress = Guid.NewGuid().ToString(); context.ListenUriMode = ListenUriMode.Explicit; } else { // #pragma warning suppress 56506 // [....], context.Binding will never be null. context.ListenUriRelativeAddress = String.Empty; context.ListenUriMode = ListenUriMode.Unique; } } return context.BuildInnerChannelListener (); } public override bool CanBuildChannelFactory (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } return (typeof(TChannel) == typeof(IOutputChannel)) && context.CanBuildInnerChannelFactory (); } public override bool CanBuildChannelListener (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } return (typeof(TChannel) == typeof(IInputChannel)) && context.CanBuildInnerChannelListener (); } ChannelProtectionRequirements GetProtectionRequirements() { ChannelProtectionRequirements result = new ChannelProtectionRequirements(); XmlQualifiedName refPropHeaderName = new XmlQualifiedName(XD.UtilityDictionary.UniqueEndpointHeaderName.Value, XD.UtilityDictionary.UniqueEndpointHeaderNamespace.Value); MessagePartSpecification headerParts = new MessagePartSpecification(refPropHeaderName); headerParts.MakeReadOnly(); result.IncomingSignatureParts.AddParts(headerParts); result.OutgoingSignatureParts.AddParts(headerParts); return result; } public override T GetProperty (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (typeof(T) == typeof(ISecurityCapabilities)) { ISecurityCapabilities lowerCapabilities = context.GetInnerProperty (); 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 null; } } else if (typeof(T) == typeof(ChannelProtectionRequirements)) { ChannelProtectionRequirements myRequirements = this.GetProtectionRequirements(); myRequirements.Add(context.GetInnerProperty () ?? new ChannelProtectionRequirements()); return (T)(object)myRequirements; } else { return context.GetInnerProperty (); } } internal override bool IsMatch(BindingElement b) { if (b == null) { return false; } CompositeDuplexBindingElement duplex = b as CompositeDuplexBindingElement; if (duplex == null) { return false; } return (this.clientBaseAddress == duplex.clientBaseAddress); } void IPolicyExportExtension.ExportPolicy(MetadataExporter exporter, PolicyConversionContext context) { if (context == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); exporter.State[typeof(SupportedAddressingMode).Name] = SupportedAddressingMode.NonAnonymous; context.GetBindingAssertions().Add(CreateCompositeDuplexAssertion()); } static XmlElement CreateCompositeDuplexAssertion() { XmlDocument doc = new XmlDocument(); return doc.CreateElement(TransportPolicyConstants.CompositeDuplexPrefix, TransportPolicyConstants.CompositeDuplex, TransportPolicyConstants.CompositeDuplexNamespace); } } } // 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
- URLAttribute.cs
- CompilerGeneratedAttribute.cs
- ZipArchive.cs
- TextTreeRootTextBlock.cs
- ResolveNameEventArgs.cs
- DocumentViewerConstants.cs
- StrokeFIndices.cs
- DesignerVerbCollection.cs
- SortedList.cs
- TextRangeProviderWrapper.cs
- Evidence.cs
- VersionConverter.cs
- TransportSecurityBindingElement.cs
- TextModifier.cs
- SoapObjectWriter.cs
- CheckBox.cs
- InvalidFilterCriteriaException.cs
- XmlSignatureProperties.cs
- Table.cs
- TextViewBase.cs
- AsyncCodeActivityContext.cs
- ConfigUtil.cs
- MenuAdapter.cs
- ModelTreeEnumerator.cs
- MonitorWrapper.cs
- EventLogEntryCollection.cs
- odbcmetadatacolumnnames.cs
- securitymgrsite.cs
- CheckPair.cs
- AccessibleObject.cs
- StringUtil.cs
- XPathSingletonIterator.cs
- NetworkInformationPermission.cs
- NullableBoolConverter.cs
- EnumValAlphaComparer.cs
- TemplateControlCodeDomTreeGenerator.cs
- XsdBuilder.cs
- NativeMethods.cs
- TreeView.cs
- WSFederationHttpSecurityMode.cs
- OneOfElement.cs
- TrustLevelCollection.cs
- ThreadAbortException.cs
- XsdDateTime.cs
- ServicePointManagerElement.cs
- ElementInit.cs
- IndicFontClient.cs
- PartitionedStreamMerger.cs
- OutKeywords.cs
- TableLayoutCellPaintEventArgs.cs
- WinFormsUtils.cs
- Accessible.cs
- PersistenceProviderDirectory.cs
- UrlAuthFailedErrorFormatter.cs
- FixedLineResult.cs
- CheckPair.cs
- X509Utils.cs
- ControlPaint.cs
- SecondaryIndex.cs
- QilDataSource.cs
- TraceSource.cs
- ThemeDirectoryCompiler.cs
- ConfigurationStrings.cs
- ListControlBoundActionList.cs
- SchemaTableOptionalColumn.cs
- SendMailErrorEventArgs.cs
- ErrorItem.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- ResourceDictionaryCollection.cs
- PagedDataSource.cs
- SqlTopReducer.cs
- MessageSmuggler.cs
- ComponentDispatcher.cs
- WebPartMenu.cs
- WeakReferenceKey.cs
- ExtensionWindowResizeGrip.cs
- Descriptor.cs
- QilPatternFactory.cs
- Point.cs
- TimelineGroup.cs
- SqlParameter.cs
- BrowserCapabilitiesFactoryBase.cs
- DataTableNewRowEvent.cs
- BindingParameterCollection.cs
- SortDescriptionCollection.cs
- ConnectionStringSettingsCollection.cs
- ZoneMembershipCondition.cs
- MimeAnyImporter.cs
- ButtonBase.cs
- RC2.cs
- MgmtResManager.cs
- CharEnumerator.cs
- BinaryObjectWriter.cs
- Rijndael.cs
- StringStorage.cs
- SecurityBindingElement.cs
- ObjectStorage.cs
- UidPropertyAttribute.cs
- ListenerHandler.cs
- RelationshipEndMember.cs