| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel
- {
- using System.Reflection;
- using System.ServiceModel.Channels;
- using System.ServiceModel.Dispatcher;
- using System.ServiceModel.Description;
- using System.Transactions;
- using System.ServiceModel.Security;
- using System.Security.Principal;
- using System.Collections.Generic;
- [AttributeUsage(ServiceModelAttributeTargets.OperationBehavior)]
- public sealed class OperationBehaviorAttribute : Attribute, IOperationBehavior
- {
- internal const ImpersonationOption DefaultImpersonationOption = ImpersonationOption.NotAllowed;
- bool autoCompleteTransaction = true;
- bool autoEnlistTransaction = false;
- bool autoDisposeParameters = true;
- bool preferAsyncInvocation = false;
- ImpersonationOption impersonation = ImpersonationOption.NotAllowed;
- ReleaseInstanceMode releaseInstance = ReleaseInstanceMode.None;
- public bool TransactionAutoComplete
- {
- get { return this.autoCompleteTransaction; }
- set { this.autoCompleteTransaction = value; }
- }
- public bool TransactionScopeRequired
- {
- get { return this.autoEnlistTransaction; }
- set { this.autoEnlistTransaction = value; }
- }
- public bool AutoDisposeParameters
- {
- get { return this.autoDisposeParameters; }
- set { this.autoDisposeParameters = value; }
- }
- public ImpersonationOption Impersonation
- {
- get
- {
- return this.impersonation;
- }
- set
- {
- if (!ImpersonationOptionHelper.IsDefined(value))
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
- }
- this.impersonation = value;
- }
- }
- public ReleaseInstanceMode ReleaseInstanceMode
- {
- get { return this.releaseInstance; }
- set
- {
- if (!ReleaseInstanceModeHelper.IsDefined(value))
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
- }
- this.releaseInstance = value;
- }
- }
- internal bool PreferAsyncInvocation
- {
- get { return this.preferAsyncInvocation; }
- set { this.preferAsyncInvocation = value; }
- }
- void IOperationBehavior.Validate(OperationDescription description)
- {
- }
- void IOperationBehavior.AddBindingParameters(OperationDescription description, BindingParameterCollection parameters)
- {
- }
- void IOperationBehavior.ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch)
- {
- if (description == null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("description");
- }
- if (dispatch == null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("dispatch");
- }
- if (description.IsServerInitiated() && this.releaseInstance != ReleaseInstanceMode.None)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
- SR.GetString(SR.SFxOperationBehaviorAttributeReleaseInstanceModeDoesNotApplyToCallback,
- description.Name)));
- }
- dispatch.TransactionRequired = this.autoEnlistTransaction;
- dispatch.TransactionAutoComplete = this.autoCompleteTransaction;
- dispatch.AutoDisposeParameters = this.autoDisposeParameters;
- dispatch.ReleaseInstanceBeforeCall = (this.releaseInstance & ReleaseInstanceMode.BeforeCall) != 0;
- dispatch.ReleaseInstanceAfterCall = (this.releaseInstance & ReleaseInstanceMode.AfterCall) != 0;
- dispatch.Impersonation = this.Impersonation;
- }
- void IOperationBehavior.ApplyClientBehavior(OperationDescription description, ClientOperation proxy)
- {
- }
- }
- }
|