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
- NamedObject.cs
- COM2PropertyBuilderUITypeEditor.cs
- PageParser.cs
- RegexNode.cs
- CompilationLock.cs
- DesignerOptionService.cs
- SqlConnectionFactory.cs
- StateMachineWorkflow.cs
- CfgRule.cs
- Literal.cs
- StatusBarPanel.cs
- DescendantBaseQuery.cs
- ScrollItemPattern.cs
- DynamicPropertyReader.cs
- TemplatedWizardStep.cs
- FlowDocumentFormatter.cs
- CompositeActivityTypeDescriptor.cs
- WmlPhoneCallAdapter.cs
- DesignerValidatorAdapter.cs
- WindowsButton.cs
- SourceSwitch.cs
- SqlInfoMessageEvent.cs
- SurrogateEncoder.cs
- WorkflowRuntimeService.cs
- TextUtf8RawTextWriter.cs
- NameValueFileSectionHandler.cs
- ConfigurationLocationCollection.cs
- ObjectSet.cs
- Paragraph.cs
- Int16KeyFrameCollection.cs
- SafeFileMapViewHandle.cs
- Int16AnimationBase.cs
- RegexCapture.cs
- XmlDataProvider.cs
- DriveInfo.cs
- DataViewSetting.cs
- Currency.cs
- DataGridViewMethods.cs
- TickBar.cs
- EntityDataReader.cs
- Attributes.cs
- EntityTypeBase.cs
- AggregateNode.cs
- versioninfo.cs
- InvalidDataContractException.cs
- ToolStripPanel.cs
- XmlCharCheckingWriter.cs
- StylusButtonCollection.cs
- LOSFormatter.cs
- WebBrowserUriTypeConverter.cs
- TreeViewBindingsEditorForm.cs
- XmlSchemaSimpleTypeRestriction.cs
- ContractMapping.cs
- CaseInsensitiveComparer.cs
- PropertyContainer.cs
- DataRecordInfo.cs
- PerformanceCounter.cs
- EncoderParameter.cs
- FormsAuthentication.cs
- EventQueueState.cs
- SiteMapSection.cs
- SpeechRecognizer.cs
- HelpEvent.cs
- PropagatorResult.cs
- BitmapEncoder.cs
- FixedPosition.cs
- WindowsListViewItem.cs
- UserControl.cs
- CodeTypeOfExpression.cs
- DataGridLengthConverter.cs
- SettingsPropertyIsReadOnlyException.cs
- InlinedAggregationOperatorEnumerator.cs
- CompilerScopeManager.cs
- BaseValidator.cs
- UnsafeNativeMethods.cs
- SoapSchemaImporter.cs
- ObjectManager.cs
- SHA1.cs
- ExtensionDataReader.cs
- CultureSpecificStringDictionary.cs
- serverconfig.cs
- ToolStripPanelCell.cs
- MimeTypeAttribute.cs
- GridLengthConverter.cs
- MethodAccessException.cs
- EventData.cs
- DataGridTable.cs
- PointHitTestResult.cs
- SiteMapHierarchicalDataSourceView.cs
- QilTargetType.cs
- CookieProtection.cs
- DesignerTextWriter.cs
- ClonableStack.cs
- DocumentScope.cs
- PageThemeBuildProvider.cs
- RuleCache.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- Triplet.cs
- XmlILConstructAnalyzer.cs
- Dump.cs