Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / DeliveryRequirementsAttribute.cs / 1 / DeliveryRequirementsAttribute.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel { using System.Collections.Generic; using System.ServiceModel.Channels; using System.ServiceModel.Dispatcher; using System.ServiceModel.Description; // This attribute specifies what the service implementation // requires from the binding that dispatches messages. [AttributeUsage(ServiceModelAttributeTargets.ContractBehavior, AllowMultiple = true)] public sealed class DeliveryRequirementsAttribute : Attribute, IContractBehavior, IContractBehaviorAttribute { Type contractType; QueuedDeliveryRequirementsMode queuedDeliveryRequirements = QueuedDeliveryRequirementsMode.Allowed; bool requireOrderedDelivery = false; // Used to implement IContractBehaviorAttribute; if null, DeliveryRequirementsAttribute applies to any contract public Type TargetContract { get { return contractType; } set { contractType = value; } } // RequireQueuedDelivery: Validates that any binding associated // with the service/channel supports Queued // delivery. // // DisallowQueuedDelivery: Validates that no binding associated // with the service/channel supports Queued // delivery. // // Ignore: Agnostic public QueuedDeliveryRequirementsMode QueuedDeliveryRequirements { get { return queuedDeliveryRequirements; } set { if (QueuedDeliveryRequirementsModeHelper.IsDefined(value)) { queuedDeliveryRequirements = value; } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value")); } } } // True: Validates that any binding associated // with the service/channel supports Ordered // delivery. // // False: Does no validation. public bool RequireOrderedDelivery { get { return requireOrderedDelivery; } set { requireOrderedDelivery = value; } } void IContractBehavior.Validate(ContractDescription description, ServiceEndpoint endpoint) { if (description == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("description"); if (endpoint == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpoint"); ValidateEndpoint(endpoint); } void IContractBehavior.AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, BindingParameterCollection parameters) { } void IContractBehavior.ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime proxy) { } void IContractBehavior.ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch) { } void ValidateEndpoint(ServiceEndpoint endpoint) { string name = endpoint.Contract.ContractType.Name; EnsureQueuedDeliveryRequirements(name, endpoint.Binding); EnsureOrderedDeliveryRequirements(name, endpoint.Binding); } void EnsureQueuedDeliveryRequirements(string name, Binding binding) { if (QueuedDeliveryRequirements == QueuedDeliveryRequirementsMode.Required || QueuedDeliveryRequirements == QueuedDeliveryRequirementsMode.NotAllowed) { IBindingDeliveryCapabilities caps = binding.GetProperty(new BindingParameterCollection()); if (caps == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException( SR.GetString(SR.SinceTheBindingForDoesnTSupportIBindingCapabilities2_1, name))); } else { bool queuedTransport = caps.QueuedDelivery; if (QueuedDeliveryRequirements == QueuedDeliveryRequirementsMode.Required && !queuedTransport) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException( SR.GetString(SR.BindingRequirementsAttributeRequiresQueuedDelivery1, name))); } else if (QueuedDeliveryRequirements == QueuedDeliveryRequirementsMode.NotAllowed && queuedTransport) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException( SR.GetString(SR.BindingRequirementsAttributeDisallowsQueuedDelivery1, name))); } } } } void EnsureOrderedDeliveryRequirements(string name, Binding binding) { if (RequireOrderedDelivery) { IBindingDeliveryCapabilities caps = binding.GetProperty (new BindingParameterCollection()); if (caps == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException( SR.GetString(SR.SinceTheBindingForDoesnTSupportIBindingCapabilities1_1, name))); } else { if (!caps.AssuresOrderedDelivery) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException( SR.GetString(SR.TheBindingForDoesnTSupportOrderedDelivery1, name))); } } } } } } // 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
- ToggleProviderWrapper.cs
- DnsElement.cs
- SimpleFieldTemplateFactory.cs
- XmlTextReaderImplHelpers.cs
- TypeDescriptionProviderAttribute.cs
- ColumnWidthChangedEvent.cs
- ButtonBase.cs
- SiteIdentityPermission.cs
- ToolboxItemWrapper.cs
- LightweightCodeGenerator.cs
- StatusBarAutomationPeer.cs
- UnsafeNativeMethods.cs
- TreeIterator.cs
- UnsafeCollabNativeMethods.cs
- TrailingSpaceComparer.cs
- LinearGradientBrush.cs
- DataGridViewCellCollection.cs
- HyperLinkColumn.cs
- ToolStripDropDownClosedEventArgs.cs
- DataServiceProviderWrapper.cs
- ObjectHandle.cs
- XamlToRtfWriter.cs
- SystemIPInterfaceStatistics.cs
- ExceptionList.cs
- WindowCollection.cs
- Separator.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- MulticastDelegate.cs
- ProviderCommandInfoUtils.cs
- HMAC.cs
- CanonicalFontFamilyReference.cs
- FlagsAttribute.cs
- IndependentlyAnimatedPropertyMetadata.cs
- InternalConfigSettingsFactory.cs
- HeaderedItemsControl.cs
- LocalFileSettingsProvider.cs
- StylusSystemGestureEventArgs.cs
- FixedDocumentPaginator.cs
- WsdlEndpointConversionContext.cs
- EntityReference.cs
- SingleKeyFrameCollection.cs
- Rect.cs
- ScrollItemProviderWrapper.cs
- X509ChainElement.cs
- Popup.cs
- XmlRawWriterWrapper.cs
- SafeIUnknown.cs
- PageParserFilter.cs
- CompositeCollection.cs
- Parameter.cs
- DataGridRowAutomationPeer.cs
- GZipDecoder.cs
- D3DImage.cs
- SemanticResultKey.cs
- ExeContext.cs
- CaseExpr.cs
- MachineSettingsSection.cs
- XmlSerializationWriter.cs
- FileLogRecord.cs
- BuilderPropertyEntry.cs
- CompatibleIComparer.cs
- GeneralTransform3DTo2D.cs
- _SecureChannel.cs
- HyperlinkAutomationPeer.cs
- CopyOfAction.cs
- ConfigurationStrings.cs
- PngBitmapEncoder.cs
- TagPrefixInfo.cs
- LayoutTable.cs
- QuaternionValueSerializer.cs
- IndexedEnumerable.cs
- EdgeProfileValidation.cs
- PrimitiveXmlSerializers.cs
- latinshape.cs
- QueueProcessor.cs
- Section.cs
- ProcessModule.cs
- HelpFileFileNameEditor.cs
- MenuTracker.cs
- StringBuilder.cs
- InvalidPrinterException.cs
- CngUIPolicy.cs
- ReferentialConstraint.cs
- ObjectAnimationUsingKeyFrames.cs
- WebBrowserNavigatingEventHandler.cs
- EntityProxyFactory.cs
- TrackingProfile.cs
- NotFiniteNumberException.cs
- BamlBinaryWriter.cs
- RichTextBoxAutomationPeer.cs
- Model3DGroup.cs
- Ref.cs
- MetabaseServerConfig.cs
- TypeToken.cs
- XmlSchemaType.cs
- StrongNameKeyPair.cs
- WindowsHyperlink.cs
- OLEDB_Enum.cs
- XmlDeclaration.cs
- XmlEncodedRawTextWriter.cs