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
- HitTestParameters3D.cs
- TypeFieldSchema.cs
- SystemResources.cs
- Rfc2898DeriveBytes.cs
- ExclusiveCanonicalizationTransform.cs
- HttpHandlerAction.cs
- CodeConstructor.cs
- WebColorConverter.cs
- Resources.Designer.cs
- FixedLineResult.cs
- ListSourceHelper.cs
- DeferredElementTreeState.cs
- NameObjectCollectionBase.cs
- HttpCacheVary.cs
- ManualWorkflowSchedulerService.cs
- CreateUserWizard.cs
- ErasingStroke.cs
- SourceItem.cs
- DataGrid.cs
- ClosableStream.cs
- WebServiceEnumData.cs
- SqlCacheDependency.cs
- SerialStream.cs
- VisualStyleRenderer.cs
- EntityDataSourceMemberPath.cs
- InProcStateClientManager.cs
- ImageInfo.cs
- Codec.cs
- FragmentQuery.cs
- HttpWebResponse.cs
- GridViewSortEventArgs.cs
- Activator.cs
- TypeDelegator.cs
- Exceptions.cs
- DataGridViewCellEventArgs.cs
- EpmCustomContentSerializer.cs
- ImageButton.cs
- TreeView.cs
- CellTreeNode.cs
- HTMLTextWriter.cs
- PointLight.cs
- PerspectiveCamera.cs
- securestring.cs
- ContainerVisual.cs
- NameObjectCollectionBase.cs
- PublisherMembershipCondition.cs
- DbConnectionPoolGroup.cs
- SessionEndingCancelEventArgs.cs
- DetailsViewActionList.cs
- SoapClientMessage.cs
- ListViewInsertionMark.cs
- ContentOnlyMessage.cs
- TextBlockAutomationPeer.cs
- HtmlForm.cs
- StoreAnnotationsMap.cs
- PropertyItemInternal.cs
- _ContextAwareResult.cs
- ConfigXmlComment.cs
- XmlRawWriter.cs
- Decoder.cs
- Keywords.cs
- DiscoveryReferences.cs
- unitconverter.cs
- SizeChangedEventArgs.cs
- XmlSchemaDatatype.cs
- SecureEnvironment.cs
- oledbmetadatacolumnnames.cs
- InstallerTypeAttribute.cs
- EmissiveMaterial.cs
- LocalizableAttribute.cs
- FrameworkObject.cs
- XmlNode.cs
- SQLBinaryStorage.cs
- uribuilder.cs
- BitmapMetadataEnumerator.cs
- HttpHandler.cs
- DataSourceView.cs
- Config.cs
- CodeCommentStatement.cs
- XmlDataLoader.cs
- PageContentAsyncResult.cs
- Thread.cs
- PropertyMapper.cs
- DataServiceConfiguration.cs
- BufferedGraphics.cs
- ListViewItemEventArgs.cs
- InternalPermissions.cs
- Metafile.cs
- IndexedString.cs
- WindowsMenu.cs
- TraceHandler.cs
- IsolatedStorageException.cs
- HideDisabledControlAdapter.cs
- ProxyElement.cs
- ObjectSpanRewriter.cs
- TabOrder.cs
- AspCompat.cs
- ReliableOutputConnection.cs
- CompositeActivityDesigner.cs
- SystemThemeKey.cs