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
- FormViewUpdatedEventArgs.cs
- ThreadWorkerController.cs
- MimeReturn.cs
- ElementAction.cs
- DefaultPropertyAttribute.cs
- GifBitmapDecoder.cs
- ConstructorBuilder.cs
- DataReaderContainer.cs
- Resources.Designer.cs
- DependencyPropertyKind.cs
- ConnectionStringsSection.cs
- VirtualizingStackPanel.cs
- Tool.cs
- SqlBulkCopyColumnMapping.cs
- EventWaitHandleSecurity.cs
- TypeExtensionSerializer.cs
- SerializationObjectManager.cs
- ObjectListCommandsPage.cs
- TdsParserHelperClasses.cs
- KeyPressEvent.cs
- TaskFormBase.cs
- Point3DAnimationBase.cs
- WebPartAuthorizationEventArgs.cs
- ServiceInfo.cs
- EditingCoordinator.cs
- MergePropertyDescriptor.cs
- AbandonedMutexException.cs
- LoadGrammarCompletedEventArgs.cs
- DbInsertCommandTree.cs
- COM2DataTypeToManagedDataTypeConverter.cs
- SecurityContext.cs
- RadioButton.cs
- TiffBitmapEncoder.cs
- SmtpCommands.cs
- WorkflowInstanceProvider.cs
- DataSourceCache.cs
- XmlSchemaDocumentation.cs
- TextLineBreak.cs
- MimeMultiPart.cs
- URLMembershipCondition.cs
- PropertyValueUIItem.cs
- RangeValuePatternIdentifiers.cs
- IPeerNeighbor.cs
- NotSupportedException.cs
- UnionCodeGroup.cs
- UnknownBitmapDecoder.cs
- ProjectionQueryOptionExpression.cs
- RegionIterator.cs
- InvokeHandlers.cs
- ToolboxBitmapAttribute.cs
- FilteredXmlReader.cs
- VerificationAttribute.cs
- ActivityCodeDomSerializer.cs
- PermissionSetEnumerator.cs
- HwndKeyboardInputProvider.cs
- Reference.cs
- IDReferencePropertyAttribute.cs
- ControlAdapter.cs
- DataListItemEventArgs.cs
- WebBrowserUriTypeConverter.cs
- DragEvent.cs
- FrameSecurityDescriptor.cs
- OutKeywords.cs
- UIElement3D.cs
- SafeTimerHandle.cs
- ListBoxItem.cs
- DbConnectionFactory.cs
- AssemblyHash.cs
- OneToOneMappingSerializer.cs
- NativeObjectSecurity.cs
- ToolbarAUtomationPeer.cs
- ComplexPropertyEntry.cs
- HtmlInputFile.cs
- HostingEnvironmentSection.cs
- StringReader.cs
- ECDiffieHellmanPublicKey.cs
- WebPartHeaderCloseVerb.cs
- EdmSchemaError.cs
- ReadWriteObjectLock.cs
- FontDialog.cs
- ObjectIDGenerator.cs
- XmlLanguageConverter.cs
- C14NUtil.cs
- RepeaterItemCollection.cs
- DateTimeUtil.cs
- Storyboard.cs
- CookielessData.cs
- DesignerGenericWebPart.cs
- Int16Storage.cs
- OpCellTreeNode.cs
- altserialization.cs
- Random.cs
- MultilineStringConverter.cs
- FileAuthorizationModule.cs
- KeyValueSerializer.cs
- PolicyUtility.cs
- DropDownHolder.cs
- DataServiceQueryContinuation.cs
- Substitution.cs
- WindowsListViewGroupHelper.cs