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
- HiddenField.cs
- SchemaAttDef.cs
- IImplicitResourceProvider.cs
- StoreItemCollection.Loader.cs
- ArrangedElementCollection.cs
- CollectionChangeEventArgs.cs
- RegexReplacement.cs
- SettingsContext.cs
- StubHelpers.cs
- HyperLinkColumn.cs
- SequentialWorkflowRootDesigner.cs
- HttpCachePolicyBase.cs
- BrowserCapabilitiesFactoryBase.cs
- ToolStripDesignerAvailabilityAttribute.cs
- CodeEntryPointMethod.cs
- ItemCheckEvent.cs
- WebGetAttribute.cs
- KeyFrames.cs
- StateManagedCollection.cs
- ChangeConflicts.cs
- BulletedListEventArgs.cs
- WindowsStatic.cs
- VisualProxy.cs
- PathSegmentCollection.cs
- IResourceProvider.cs
- Stack.cs
- IRCollection.cs
- RotateTransform.cs
- RectIndependentAnimationStorage.cs
- MappedMetaModel.cs
- XomlCompilerHelpers.cs
- TableLayoutColumnStyleCollection.cs
- ExpressionList.cs
- HttpPostedFile.cs
- Int64Storage.cs
- Expression.cs
- SHA512Managed.cs
- DurableInstanceProvider.cs
- MenuStrip.cs
- Visitors.cs
- XamlToRtfWriter.cs
- DataPagerCommandEventArgs.cs
- WebConfigurationManager.cs
- TableItemStyle.cs
- MultiPropertyDescriptorGridEntry.cs
- LoginUtil.cs
- TypeProvider.cs
- CacheSection.cs
- WebPartCancelEventArgs.cs
- XmlObjectSerializerReadContextComplexJson.cs
- DataPagerFieldCommandEventArgs.cs
- FocusChangedEventArgs.cs
- Currency.cs
- SqlResolver.cs
- WsdlHelpGeneratorElement.cs
- RelationshipManager.cs
- HexParser.cs
- ResourceKey.cs
- ProcessingInstructionAction.cs
- ReadOnlyCollectionBase.cs
- ContextQuery.cs
- Tuple.cs
- FieldTemplateFactory.cs
- CachedFontFamily.cs
- NullableConverter.cs
- DefaultParameterValueAttribute.cs
- PageAsyncTaskManager.cs
- securitymgrsite.cs
- SecurityKeyType.cs
- Flattener.cs
- ObjectFullSpanRewriter.cs
- Permission.cs
- Int32AnimationBase.cs
- EffectiveValueEntry.cs
- SystemGatewayIPAddressInformation.cs
- PrintDialog.cs
- ZipIOExtraFieldElement.cs
- InkCanvasFeedbackAdorner.cs
- ClassicBorderDecorator.cs
- TypeRestriction.cs
- SimpleBitVector32.cs
- BezierSegment.cs
- MailDefinition.cs
- Int64KeyFrameCollection.cs
- Oid.cs
- ProcessProtocolHandler.cs
- RC2.cs
- WebRequestModuleElement.cs
- EndpointDiscoveryMetadata.cs
- ErrorFormatterPage.cs
- EncodingTable.cs
- XmlCountingReader.cs
- TextStore.cs
- CollectionViewSource.cs
- DiscardableAttribute.cs
- ConstrainedDataObject.cs
- TaskResultSetter.cs
- ForeignConstraint.cs
- ProcessModule.cs
- Italic.cs