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
- InlineUIContainer.cs
- LeafCellTreeNode.cs
- RadioButton.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- controlskin.cs
- EventProviderClassic.cs
- Point3DCollectionValueSerializer.cs
- Size3D.cs
- DataTemplateKey.cs
- Soap12ProtocolImporter.cs
- DocumentGridPage.cs
- MediaTimeline.cs
- PerformanceCounterLib.cs
- CriticalHandle.cs
- DataGridViewCell.cs
- CngKeyCreationParameters.cs
- TextEditorThreadLocalStore.cs
- PipelineModuleStepContainer.cs
- OleDbRowUpdatingEvent.cs
- CodeIterationStatement.cs
- DesignerForm.cs
- WinOEToolBoxItem.cs
- DefaultTraceListener.cs
- CacheChildrenQuery.cs
- AssemblyNameProxy.cs
- RtfToken.cs
- WindowsAuthenticationEventArgs.cs
- ResourcesBuildProvider.cs
- XmlAttributeAttribute.cs
- HtmlContainerControl.cs
- SqlMetaData.cs
- DictionaryKeyPropertyAttribute.cs
- ObjectStateEntryDbDataRecord.cs
- SecureConversationVersion.cs
- StreamInfo.cs
- ComAwareEventInfo.cs
- AttributeProviderAttribute.cs
- ToolStripManager.cs
- TickBar.cs
- CodeEntryPointMethod.cs
- PropertySourceInfo.cs
- GridViewDeleteEventArgs.cs
- ObjectQueryExecutionPlan.cs
- PolicyLevel.cs
- SHA512.cs
- TablePattern.cs
- LicenseException.cs
- DomNameTable.cs
- TimeoutStream.cs
- CutCopyPasteHelper.cs
- Light.cs
- BitmapFrameEncode.cs
- WinEventWrap.cs
- WebException.cs
- ModifierKeysConverter.cs
- RuleRefElement.cs
- Native.cs
- SafeNativeMethodsCLR.cs
- TextInfo.cs
- SqlNotificationRequest.cs
- UInt64Converter.cs
- HttpGetServerProtocol.cs
- IdentityModelDictionary.cs
- ListDictionary.cs
- WebPartCloseVerb.cs
- ZipIOBlockManager.cs
- HashRepartitionEnumerator.cs
- DynamicPropertyHolder.cs
- BuildManager.cs
- NameValueConfigurationElement.cs
- AdornerHitTestResult.cs
- FormatterServices.cs
- RecordManager.cs
- CompressStream.cs
- ReachDocumentSequenceSerializer.cs
- AutoGeneratedFieldProperties.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- BindingEntityInfo.cs
- RemotingSurrogateSelector.cs
- ShutDownListener.cs
- SelectorAutomationPeer.cs
- Rfc2898DeriveBytes.cs
- DataFormats.cs
- CodeGenerator.cs
- cookie.cs
- MemberHolder.cs
- ExpandedWrapper.cs
- XmlSchemaType.cs
- SymbolType.cs
- DecimalAverageAggregationOperator.cs
- SByteStorage.cs
- PageSettings.cs
- TTSEngineProxy.cs
- MailWriter.cs
- XamlFilter.cs
- SqlFacetAttribute.cs
- TypedDataSetSchemaImporterExtension.cs
- COAUTHINFO.cs
- SqlWriter.cs
- MultiBindingExpression.cs