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
- IncrementalCompileAnalyzer.cs
- WebServiceMethodData.cs
- DictionaryEntry.cs
- StyleModeStack.cs
- XmlReflectionMember.cs
- RuleSettings.cs
- WebReferencesBuildProvider.cs
- FormViewDeletedEventArgs.cs
- AvTraceFormat.cs
- CriticalHandle.cs
- UnauthorizedAccessException.cs
- FileDialogCustomPlace.cs
- FontFamily.cs
- SecurityTokenAuthenticator.cs
- OledbConnectionStringbuilder.cs
- LocalFileSettingsProvider.cs
- WindowsRichEdit.cs
- SetterBaseCollection.cs
- AnyAllSearchOperator.cs
- FileUpload.cs
- Column.cs
- PublisherIdentityPermission.cs
- ManagementDateTime.cs
- RegexFCD.cs
- PreloadedPackages.cs
- MemberNameValidator.cs
- SessionEndedEventArgs.cs
- DllNotFoundException.cs
- Point3DAnimationBase.cs
- MetabaseServerConfig.cs
- HashHelper.cs
- CodeObject.cs
- Bezier.cs
- WebPartConnectionsEventArgs.cs
- ExternalException.cs
- PriorityQueue.cs
- ContextStack.cs
- ScriptReferenceEventArgs.cs
- CreateUserErrorEventArgs.cs
- DefaultBinder.cs
- Adorner.cs
- GlobalDataBindingHandler.cs
- QilFactory.cs
- JsonObjectDataContract.cs
- SkinBuilder.cs
- DataGridToolTip.cs
- Descriptor.cs
- DrawingContextDrawingContextWalker.cs
- HostedHttpTransportManager.cs
- ControlsConfig.cs
- BaseAddressPrefixFilterElementCollection.cs
- UserControlCodeDomTreeGenerator.cs
- DbConnectionPoolOptions.cs
- TextStore.cs
- TdsParameterSetter.cs
- DataRowChangeEvent.cs
- ImmComposition.cs
- _CacheStreams.cs
- Win32Native.cs
- ConfigurationValidatorAttribute.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- SEHException.cs
- _CommandStream.cs
- diagnosticsswitches.cs
- HttpRuntimeSection.cs
- MessagePropertyVariants.cs
- StopStoryboard.cs
- ResourceExpressionEditorSheet.cs
- Filter.cs
- ListViewGroup.cs
- ActivityDesignerResources.cs
- CallContext.cs
- AsyncResult.cs
- DataObjectAttribute.cs
- ParagraphResult.cs
- ContextCorrelationInitializer.cs
- Base64Decoder.cs
- BitmapEffectDrawingContent.cs
- ChangeConflicts.cs
- InkCanvasAutomationPeer.cs
- wgx_commands.cs
- Subtree.cs
- SQLInt32Storage.cs
- WebEventCodes.cs
- DataGridAddNewRow.cs
- Dictionary.cs
- RtType.cs
- RequestCachePolicy.cs
- CharacterString.cs
- ResolvedKeyFrameEntry.cs
- StateRuntime.cs
- ISFTagAndGuidCache.cs
- Char.cs
- MethodCallExpression.cs
- Rectangle.cs
- StylusButtonEventArgs.cs
- TypeNameParser.cs
- DataViewManager.cs
- LocatorBase.cs
- CalendarDay.cs