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
- XhtmlBasicFormAdapter.cs
- COAUTHIDENTITY.cs
- PropertyInformationCollection.cs
- TagMapInfo.cs
- SendContent.cs
- EventHandlersStore.cs
- FaultDesigner.cs
- WebContentFormatHelper.cs
- DataGridRowsPresenter.cs
- TcpAppDomainProtocolHandler.cs
- FtpCachePolicyElement.cs
- XmlBinaryReader.cs
- TextModifierScope.cs
- WhileDesigner.cs
- FixUp.cs
- MobileUserControlDesigner.cs
- ProcessingInstructionAction.cs
- StandardCommandToolStripMenuItem.cs
- x509utils.cs
- DoubleLinkListEnumerator.cs
- RenderData.cs
- DataGridViewAccessibleObject.cs
- COM2IDispatchConverter.cs
- ResourceProperty.cs
- RelationshipEndMember.cs
- DiscriminatorMap.cs
- ProtocolsConfigurationHandler.cs
- AccessKeyManager.cs
- DesignerSerializerAttribute.cs
- WinInetCache.cs
- SliderAutomationPeer.cs
- ItemChangedEventArgs.cs
- X509UI.cs
- KeyConverter.cs
- XmlMembersMapping.cs
- HtmlTitle.cs
- CompleteWizardStep.cs
- WebControl.cs
- EntityDataSourceContainerNameConverter.cs
- _TimerThread.cs
- XmlValidatingReaderImpl.cs
- LocalValueEnumerator.cs
- InputGestureCollection.cs
- CriticalFinalizerObject.cs
- SafeNativeMethods.cs
- BufferedGraphicsContext.cs
- CodeBinaryOperatorExpression.cs
- RelationshipConstraintValidator.cs
- controlskin.cs
- AssemblyInfo.cs
- InlineCollection.cs
- Point3DValueSerializer.cs
- SymbolUsageManager.cs
- Matrix.cs
- ParseHttpDate.cs
- MergePropertyDescriptor.cs
- ImageCodecInfo.cs
- RealizationDrawingContextWalker.cs
- DelegatingTypeDescriptionProvider.cs
- ExeConfigurationFileMap.cs
- ReferenceEqualityComparer.cs
- TypeListConverter.cs
- ImageList.cs
- EventProperty.cs
- SelectedGridItemChangedEvent.cs
- GorillaCodec.cs
- SmiContext.cs
- ApplicationServiceHelper.cs
- SignedInfo.cs
- PolicyManager.cs
- FloaterParagraph.cs
- ConfigurationProperty.cs
- DrawingImage.cs
- ProfilePropertyNameValidator.cs
- ContainerTracking.cs
- dbenumerator.cs
- XsltContext.cs
- Win32PrintDialog.cs
- Number.cs
- Guid.cs
- HtmlCommandAdapter.cs
- ScriptRegistrationManager.cs
- CharacterHit.cs
- PointLightBase.cs
- HTTPNotFoundHandler.cs
- UIAgentRequest.cs
- GenericTypeParameterBuilder.cs
- WebPartZoneCollection.cs
- LinkUtilities.cs
- LineGeometry.cs
- Terminate.cs
- SqlProcedureAttribute.cs
- CompensableActivity.cs
- PathNode.cs
- UnionCqlBlock.cs
- XslCompiledTransform.cs
- BamlMapTable.cs
- DbCommandTree.cs
- ObjectMemberMapping.cs
- Brush.cs