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
- OdbcUtils.cs
- DesignerTransaction.cs
- RegexCharClass.cs
- NameValueCollection.cs
- ComplexBindingPropertiesAttribute.cs
- TextEffect.cs
- RegexRunner.cs
- XappLauncher.cs
- CodePrimitiveExpression.cs
- ColorDialog.cs
- EntityModelBuildProvider.cs
- EventBuilder.cs
- httpapplicationstate.cs
- DataSpaceManager.cs
- DataServiceProcessingPipelineEventArgs.cs
- UIElement.cs
- ObjectMaterializedEventArgs.cs
- FileIOPermission.cs
- JapaneseCalendar.cs
- TypeConverter.cs
- recordstate.cs
- FormViewCommandEventArgs.cs
- Form.cs
- PolicyManager.cs
- MimeTypeAttribute.cs
- XmlnsCompatibleWithAttribute.cs
- TextDecorations.cs
- EDesignUtil.cs
- MaterialGroup.cs
- BamlMapTable.cs
- SystemWebExtensionsSectionGroup.cs
- DynamicEntity.cs
- BitmapScalingModeValidation.cs
- NativeMethods.cs
- XamlToRtfWriter.cs
- QilNode.cs
- RegexCompiler.cs
- UIInitializationException.cs
- TemplateControlCodeDomTreeGenerator.cs
- MdiWindowListStrip.cs
- GenericRootAutomationPeer.cs
- RadioButton.cs
- IIS7UserPrincipal.cs
- BrowserCapabilitiesCodeGenerator.cs
- PropertyKey.cs
- DictationGrammar.cs
- WebPartTransformerCollection.cs
- Documentation.cs
- WebPartCatalogAddVerb.cs
- BindingManagerDataErrorEventArgs.cs
- DecoderBestFitFallback.cs
- DoubleStorage.cs
- HtmlGenericControl.cs
- RegistrySecurity.cs
- RichTextBox.cs
- pingexception.cs
- DateRangeEvent.cs
- FigureHelper.cs
- DataGridViewControlCollection.cs
- BmpBitmapDecoder.cs
- FontFamilyConverter.cs
- UnsafeNativeMethods.cs
- WebHttpSecurityModeHelper.cs
- CodeConstructor.cs
- WebScriptServiceHost.cs
- ScriptResourceHandler.cs
- BuildProviderAppliesToAttribute.cs
- StructuredCompositeActivityDesigner.cs
- IPGlobalProperties.cs
- RegexInterpreter.cs
- BlurBitmapEffect.cs
- CultureNotFoundException.cs
- PropertyMapper.cs
- ParenthesizePropertyNameAttribute.cs
- PointCollectionConverter.cs
- ISFClipboardData.cs
- HttpListenerTimeoutManager.cs
- FontWeight.cs
- TextSelectionProcessor.cs
- ToolStripSplitStackLayout.cs
- TemplateAction.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- DataServiceQueryException.cs
- UdpRetransmissionSettings.cs
- MailDefinition.cs
- __Error.cs
- SchemaType.cs
- BinaryOperationBinder.cs
- DecimalKeyFrameCollection.cs
- XmlValueConverter.cs
- PlainXmlSerializer.cs
- IdentityNotMappedException.cs
- RedistVersionInfo.cs
- VisemeEventArgs.cs
- UrlPath.cs
- DataSourceCache.cs
- ThumbAutomationPeer.cs
- PackageRelationship.cs
- ConditionalWeakTable.cs
- TheQuery.cs