Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / OneWayBindingElement.cs / 1 / OneWayBindingElement.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 OneWayBindingElement : BindingElement, IPolicyExportExtension { ChannelPoolSettings channelPoolSettings; bool packetRoutable; int maxAcceptedChannels; public OneWayBindingElement() { this.channelPoolSettings = new ChannelPoolSettings(); this.packetRoutable = OneWayDefaults.PacketRoutable; this.maxAcceptedChannels = OneWayDefaults.MaxAcceptedChannels; } OneWayBindingElement(OneWayBindingElement elementToBeCloned) : base(elementToBeCloned) { this.channelPoolSettings = elementToBeCloned.ChannelPoolSettings.Clone(); this.packetRoutable = elementToBeCloned.PacketRoutable; this.maxAcceptedChannels = elementToBeCloned.maxAcceptedChannels; } public ChannelPoolSettings ChannelPoolSettings { get { return this.channelPoolSettings; } } // server public int MaxAcceptedChannels { get { return this.maxAcceptedChannels; } set { if (value <= 0) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.ValueMustBePositive))); this.maxAcceptedChannels = value; } } public bool PacketRoutable { get { return this.packetRoutable; } set { this.packetRoutable = value; } } public override BindingElement Clone() { return new OneWayBindingElement(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))); } // Prefer IDuplexSessionChannel if (context.CanBuildInnerChannelFactory ()) { return (IChannelFactory )(object)new DuplexSessionOneWayChannelFactory(this, context); } // Followed by IRequestChannel if (context.CanBuildInnerChannelFactory ()) { return (IChannelFactory )(object)new RequestOneWayChannelFactory(this, context); } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( #pragma warning suppress 56506 // context.Binding will never be null. new InvalidOperationException(SR.GetString(SR.OneWayInternalTypeNotSupported, context.Binding.Name))); } 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))); } // Prefer IDuplexSessionChannel if (context.CanBuildInnerChannelListener ()) { return (IChannelListener )(object)new DuplexSessionOneWayChannelListener(this, context); } // Followed by IRequestChannel if (context.CanBuildInnerChannelListener ()) { return (IChannelListener )(object)new ReplyOneWayChannelListener(this, context); } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( #pragma warning suppress 56506 // context.Binding will never be null. new InvalidOperationException(SR.GetString(SR.OneWayInternalTypeNotSupported, context.Binding.Name))); } public override bool CanBuildChannelFactory (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (typeof(TChannel) != typeof(IOutputChannel)) { return false; } // we can convert IDuplexSessionChannel if (context.Clone().CanBuildInnerChannelFactory ()) { return true; } // and also IRequestChannel if (context.CanBuildInnerChannelFactory ()) { return true; } return false; } public override bool CanBuildChannelListener (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (typeof(TChannel) != typeof(IInputChannel)) { return false; } // we can convert IDuplexSessionChannel if (context.Clone().CanBuildInnerChannelListener ()) { return true; } // and also IRequestChannel if (context.CanBuildInnerChannelListener ()) { return true; } return false; } static MessagePartSpecification oneWaySignedMessageParts; static MessagePartSpecification OneWaySignedMessageParts { get { if (oneWaySignedMessageParts == null) { MessagePartSpecification tempSignedMessageParts = new MessagePartSpecification( new XmlQualifiedName(DotNetOneWayStrings.HeaderName, DotNetOneWayStrings.Namespace) ); tempSignedMessageParts.MakeReadOnly(); oneWaySignedMessageParts = tempSignedMessageParts; } return oneWaySignedMessageParts; } } public override T GetProperty (BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } // make sure our Datagram header is signed if (typeof(T) == typeof(ChannelProtectionRequirements)) { ChannelProtectionRequirements myRequirements = new ChannelProtectionRequirements(); if (PacketRoutable) { myRequirements.IncomingSignatureParts.AddParts(OneWaySignedMessageParts); myRequirements.OutgoingSignatureParts.AddParts(OneWaySignedMessageParts); } ChannelProtectionRequirements innerRequirements = context.GetInnerProperty (); if (innerRequirements != null) { myRequirements.Add(innerRequirements); } return (T)(object)myRequirements; } else { return context.GetInnerProperty (); } } internal override bool IsMatch(BindingElement b) { if (b == null) { return false; } OneWayBindingElement oneWayBindingElement = b as OneWayBindingElement; if (oneWayBindingElement == null) { return false; } if (!this.channelPoolSettings.IsMatch(oneWayBindingElement.ChannelPoolSettings)) { return false; } if (this.packetRoutable != oneWayBindingElement.PacketRoutable) { return false; } if (this.maxAcceptedChannels != oneWayBindingElement.MaxAcceptedChannels) { return false; } return true; } void IPolicyExportExtension.ExportPolicy(MetadataExporter exporter, PolicyConversionContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (context.BindingElements != null) { OneWayBindingElement oneWay = context.BindingElements.Find (); if (oneWay != null) { // base assertion XmlDocument doc = new XmlDocument(); XmlElement assertion = doc.CreateElement(OneWayPolicyConstants.Prefix, OneWayPolicyConstants.OneWay, OneWayPolicyConstants.Namespace); if (oneWay.PacketRoutable) { // add nested packet routable assertion XmlElement child = doc.CreateElement(OneWayPolicyConstants.Prefix, OneWayPolicyConstants.PacketRoutable, OneWayPolicyConstants.Namespace); assertion.AppendChild(child); } context.GetBindingAssertions().Add(assertion); } } } } } // 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
- AmbiguousMatchException.cs
- SingleObjectCollection.cs
- SoapMessage.cs
- PathSegment.cs
- SubclassTypeValidator.cs
- TextSerializer.cs
- WebServiceResponseDesigner.cs
- DataRow.cs
- XomlCompilerHelpers.cs
- XamlTypeMapperSchemaContext.cs
- LineServicesRun.cs
- TypedElement.cs
- CommonObjectSecurity.cs
- DoubleCollection.cs
- WebPartsPersonalizationAuthorization.cs
- AnonymousIdentificationModule.cs
- control.ime.cs
- RoleManagerEventArgs.cs
- ImportContext.cs
- CharUnicodeInfo.cs
- TextBoxLine.cs
- SystemColorTracker.cs
- WebPartUtil.cs
- ScriptControlManager.cs
- RuleSetCollection.cs
- XmlSchemaParticle.cs
- TextProviderWrapper.cs
- StylusOverProperty.cs
- XhtmlConformanceSection.cs
- Figure.cs
- ControlUtil.cs
- ManagementOperationWatcher.cs
- PrintController.cs
- BaseCollection.cs
- DataServiceHostFactory.cs
- BindingMAnagerBase.cs
- CodeTypeParameterCollection.cs
- XmlValidatingReaderImpl.cs
- UnsafeNativeMethods.cs
- CategoryNameCollection.cs
- SettingsSavedEventArgs.cs
- GrammarBuilderPhrase.cs
- RIPEMD160.cs
- ClientRuntimeConfig.cs
- XmlBinaryWriterSession.cs
- BindingExpression.cs
- SafeReversePInvokeHandle.cs
- ThreadStateException.cs
- Vector3DCollectionValueSerializer.cs
- CustomErrorCollection.cs
- StorageEntityContainerMapping.cs
- PreservationFileReader.cs
- StringFreezingAttribute.cs
- HttpConfigurationSystem.cs
- CellTreeNodeVisitors.cs
- PenThreadPool.cs
- GlobalAclOperationRequirement.cs
- RoutedEventArgs.cs
- DataGridViewLinkColumn.cs
- HMAC.cs
- ADMembershipUser.cs
- HtmlAnchor.cs
- MemberInfoSerializationHolder.cs
- TraceHandlerErrorFormatter.cs
- DateTimeUtil.cs
- ObjectDataSourceSelectingEventArgs.cs
- XmlSerializationReader.cs
- SourceFileBuildProvider.cs
- OleDbError.cs
- SecurityDocument.cs
- HandleRef.cs
- DoubleAnimationBase.cs
- AsnEncodedData.cs
- DataSourceSelectArguments.cs
- ClientTarget.cs
- ScrollPatternIdentifiers.cs
- TextTreeDeleteContentUndoUnit.cs
- XMLSyntaxException.cs
- SafeBitVector32.cs
- TransformerInfo.cs
- Font.cs
- SqlFacetAttribute.cs
- DataControlFieldCollection.cs
- ClientData.cs
- WindowsPrincipal.cs
- TemplateColumn.cs
- ObjectParameterCollection.cs
- Matrix3DConverter.cs
- Switch.cs
- CursorConverter.cs
- Token.cs
- AppLevelCompilationSectionCache.cs
- ObjectQueryProvider.cs
- WorkflowNamespace.cs
- SolidColorBrush.cs
- StrokeNodeOperations.cs
- TextReader.cs
- WriteFileContext.cs
- KnowledgeBase.cs
- SmiContextFactory.cs