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
- Task.cs
- PinnedBufferMemoryStream.cs
- Win32.cs
- M3DUtil.cs
- SocketAddress.cs
- DeviceContexts.cs
- Clock.cs
- ReadContentAsBinaryHelper.cs
- ConfigXmlAttribute.cs
- NullReferenceException.cs
- FlowSwitchLink.cs
- DefaultAutoFieldGenerator.cs
- PageRanges.cs
- QueryExpr.cs
- SystemIPInterfaceProperties.cs
- AlignmentYValidation.cs
- IndexedString.cs
- EditorZoneBase.cs
- MessagePropertyFilter.cs
- PenContexts.cs
- cookiecontainer.cs
- GroupDescription.cs
- RsaKeyIdentifierClause.cs
- ToolboxItemFilterAttribute.cs
- AudioFormatConverter.cs
- ConversionContext.cs
- ChoiceConverter.cs
- PersonalizationDictionary.cs
- ServiceSecurityAuditElement.cs
- DocumentOrderQuery.cs
- QueryCacheKey.cs
- DictionaryBase.cs
- CodeTypeDeclarationCollection.cs
- HtmlWindowCollection.cs
- MsmqIntegrationBindingCollectionElement.cs
- DataGridViewDataErrorEventArgs.cs
- CompilerInfo.cs
- TimeSpanParse.cs
- GridItemPattern.cs
- HttpApplication.cs
- OperationFormatter.cs
- NameValuePermission.cs
- IntSecurity.cs
- DocumentViewerAutomationPeer.cs
- RadioButton.cs
- Int64KeyFrameCollection.cs
- PublisherIdentityPermission.cs
- HTMLTextWriter.cs
- Inline.cs
- FlowDocumentScrollViewer.cs
- BoolExpression.cs
- ApplicationException.cs
- ConfigXmlComment.cs
- InvalidDataException.cs
- BitmapEffectInputData.cs
- TdsParserSafeHandles.cs
- AggregateException.cs
- StructuralType.cs
- FixedTextSelectionProcessor.cs
- PropertyTabAttribute.cs
- XmlComplianceUtil.cs
- Marshal.cs
- PageAdapter.cs
- RoleManagerSection.cs
- TableAutomationPeer.cs
- XmlConvert.cs
- AuthorizationRuleCollection.cs
- StringExpressionSet.cs
- XmlArrayItemAttribute.cs
- HttpCacheVary.cs
- Content.cs
- XPathNodeIterator.cs
- GridView.cs
- ProcessHostFactoryHelper.cs
- CellPartitioner.cs
- WebColorConverter.cs
- Parser.cs
- AncillaryOps.cs
- DataBoundControl.cs
- TagMapInfo.cs
- TargetParameterCountException.cs
- StyleSheetDesigner.cs
- InvalidAsynchronousStateException.cs
- ImpersonationContext.cs
- odbcmetadatacollectionnames.cs
- AppearanceEditorPart.cs
- SqlLiftIndependentRowExpressions.cs
- ArraySet.cs
- InstanceStoreQueryResult.cs
- LayoutUtils.cs
- ClientFormsAuthenticationCredentials.cs
- IgnoreFlushAndCloseStream.cs
- ObsoleteAttribute.cs
- querybuilder.cs
- ISFClipboardData.cs
- TranslateTransform.cs
- DataGridViewUtilities.cs
- BitmapEffectInputConnector.cs
- EdmPropertyAttribute.cs
- RC2.cs