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
- FixedDocument.cs
- TextEndOfLine.cs
- EntityDataSourceContainerNameConverter.cs
- CriticalFinalizerObject.cs
- DataGridLinkButton.cs
- _BasicClient.cs
- DragCompletedEventArgs.cs
- WaitForChangedResult.cs
- RtfControls.cs
- StylusTip.cs
- PnrpPeerResolverBindingElement.cs
- IApplicationTrustManager.cs
- _StreamFramer.cs
- TiffBitmapEncoder.cs
- ColorTransformHelper.cs
- DefaultBinder.cs
- TabItemWrapperAutomationPeer.cs
- ImmutableClientRuntime.cs
- MenuAdapter.cs
- XPathSingletonIterator.cs
- DbProviderSpecificTypePropertyAttribute.cs
- FrameworkContextData.cs
- PropertyItem.cs
- Sentence.cs
- XmlHierarchicalEnumerable.cs
- OperationAbortedException.cs
- HttpListener.cs
- Type.cs
- ChannelPoolSettings.cs
- XhtmlBasicTextViewAdapter.cs
- TextEffectCollection.cs
- WorkflowServiceAttributes.cs
- Point.cs
- BindingMemberInfo.cs
- WebPartConnectionsDisconnectVerb.cs
- FreezableDefaultValueFactory.cs
- RelationshipSet.cs
- NativeMethods.cs
- OleDbDataReader.cs
- AuthenticationSection.cs
- ObjectDataSourceWizardForm.cs
- SqlFacetAttribute.cs
- WindowsIPAddress.cs
- CustomAttributeBuilder.cs
- SatelliteContractVersionAttribute.cs
- SqlXml.cs
- HandleInitializationContext.cs
- LightweightCodeGenerator.cs
- MenuItemBindingCollection.cs
- EnumValAlphaComparer.cs
- ResourceDictionary.cs
- CharAnimationUsingKeyFrames.cs
- InfiniteTimeSpanConverter.cs
- PolicyLevel.cs
- RowSpanVector.cs
- URI.cs
- UniqueSet.cs
- ADMembershipProvider.cs
- DictionaryManager.cs
- Storyboard.cs
- WmfPlaceableFileHeader.cs
- DependencyObjectType.cs
- TypeSchema.cs
- Debugger.cs
- ButtonField.cs
- ClonableStack.cs
- GridViewRowEventArgs.cs
- Assert.cs
- DataGridTablesFactory.cs
- DetectEofStream.cs
- RegistrySecurity.cs
- ToolStripRenderEventArgs.cs
- ObfuscateAssemblyAttribute.cs
- ErasingStroke.cs
- RegularExpressionValidator.cs
- XmlSchemaSequence.cs
- RuleProcessor.cs
- ToolStripPanelCell.cs
- DoubleStorage.cs
- WebPartChrome.cs
- ProxyWebPart.cs
- XdrBuilder.cs
- OdbcInfoMessageEvent.cs
- PositiveTimeSpanValidator.cs
- QilCloneVisitor.cs
- JoinTreeNode.cs
- itemelement.cs
- EventLogWatcher.cs
- JoinSymbol.cs
- PropertyDescriptor.cs
- UnmanagedBitmapWrapper.cs
- ProcessHostConfigUtils.cs
- ItemsControl.cs
- ProxyHelper.cs
- BindingManagerDataErrorEventArgs.cs
- NullableLongAverageAggregationOperator.cs
- QueryOutputWriter.cs
- HwndAppCommandInputProvider.cs
- AutoResetEvent.cs
- ObjectItemCollectionAssemblyCacheEntry.cs