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
- DataServiceProviderMethods.cs
- KeyConstraint.cs
- EventLogSession.cs
- CalendarButton.cs
- SapiRecoInterop.cs
- InlineUIContainer.cs
- SqlGenericUtil.cs
- DispatcherProcessingDisabled.cs
- Configuration.cs
- TextAdaptor.cs
- XmlSerializer.cs
- ProgressPage.cs
- ReaderWriterLock.cs
- PropertyChangeTracker.cs
- ScalarType.cs
- MarginCollapsingState.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- TakeOrSkipWhileQueryOperator.cs
- DataFormat.cs
- FrameworkElementFactoryMarkupObject.cs
- Button.cs
- Window.cs
- DetailsViewInsertEventArgs.cs
- StrongNameUtility.cs
- TakeOrSkipWhileQueryOperator.cs
- DiagnosticsElement.cs
- UnsafeNativeMethods.cs
- Mutex.cs
- ForeignKeyConstraint.cs
- OpCodes.cs
- LogConverter.cs
- UriExt.cs
- InvalidComObjectException.cs
- RequestChannelBinder.cs
- ArglessEventHandlerProxy.cs
- ServiceCredentials.cs
- TripleDESCryptoServiceProvider.cs
- CuspData.cs
- WebUtil.cs
- TableItemStyle.cs
- ConnectionManager.cs
- IdentityNotMappedException.cs
- EndPoint.cs
- FormsAuthenticationTicket.cs
- RangeValidator.cs
- NativeMethods.cs
- IPCCacheManager.cs
- BStrWrapper.cs
- SoapInteropTypes.cs
- NavigateUrlConverter.cs
- XDeferredAxisSource.cs
- ArgumentOutOfRangeException.cs
- GCHandleCookieTable.cs
- iisPickupDirectory.cs
- ObjectDataSourceEventArgs.cs
- EmbossBitmapEffect.cs
- SingleStorage.cs
- ModulesEntry.cs
- ThicknessAnimationUsingKeyFrames.cs
- ObjectParameter.cs
- NativeMethods.cs
- Delegate.cs
- NotFiniteNumberException.cs
- GridViewColumn.cs
- ImageInfo.cs
- WebPartDisplayModeCollection.cs
- GridSplitter.cs
- FixedFindEngine.cs
- Expression.cs
- AvtEvent.cs
- util.cs
- PageAsyncTask.cs
- ICspAsymmetricAlgorithm.cs
- WinFormsComponentEditor.cs
- ExpressionReplacer.cs
- DataContract.cs
- EventLog.cs
- Win32Interop.cs
- DeviceSpecificDialogCachedState.cs
- SafeMarshalContext.cs
- MetricEntry.cs
- WindowsButton.cs
- SqlCacheDependencyDatabaseCollection.cs
- UIElementIsland.cs
- DrawListViewColumnHeaderEventArgs.cs
- NamedPipeTransportSecurity.cs
- Rule.cs
- WebBrowserContainer.cs
- Column.cs
- TraceContextRecord.cs
- ProcessModelInfo.cs
- PropertyValueEditor.cs
- RayHitTestParameters.cs
- StsCommunicationException.cs
- SynchronizedDispatch.cs
- parserscommon.cs
- InfocardExtendedInformationEntry.cs
- _UriTypeConverter.cs
- ISO2022Encoding.cs
- PassportAuthenticationModule.cs