345 lines
9.8 KiB
C#
345 lines
9.8 KiB
C#
|
//-----------------------------------------------------------------------------
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
namespace System.ServiceModel.Dispatcher
|
||
|
{
|
||
|
using System.ServiceModel;
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
public sealed class DispatchOperation
|
||
|
{
|
||
|
string action;
|
||
|
SynchronizedCollection<ICallContextInitializer> callContextInitializers;
|
||
|
SynchronizedCollection<FaultContractInfo> faultContractInfos;
|
||
|
IDispatchMessageFormatter formatter;
|
||
|
IDispatchFaultFormatter faultFormatter;
|
||
|
bool includeExceptionDetailInFaults;
|
||
|
ImpersonationOption impersonation;
|
||
|
IOperationInvoker invoker;
|
||
|
bool isTerminating;
|
||
|
bool isSessionOpenNotificationEnabled;
|
||
|
string name;
|
||
|
SynchronizedCollection<IParameterInspector> parameterInspectors;
|
||
|
DispatchRuntime parent;
|
||
|
bool releaseInstanceAfterCall;
|
||
|
bool releaseInstanceBeforeCall;
|
||
|
string replyAction;
|
||
|
bool transactionAutoComplete;
|
||
|
bool transactionRequired;
|
||
|
bool deserializeRequest = true;
|
||
|
bool serializeReply = true;
|
||
|
bool isOneWay;
|
||
|
bool autoDisposeParameters = true;
|
||
|
bool hasNoDisposableParameters;
|
||
|
bool isFaultFormatterSetExplicit = false;
|
||
|
bool isInsideTransactedReceiveScope = false;
|
||
|
|
||
|
public DispatchOperation(DispatchRuntime parent, string name, string action)
|
||
|
{
|
||
|
if (parent == null)
|
||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("parent");
|
||
|
if (name == null)
|
||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("name");
|
||
|
|
||
|
this.parent = parent;
|
||
|
this.name = name;
|
||
|
this.action = action;
|
||
|
this.impersonation = OperationBehaviorAttribute.DefaultImpersonationOption;
|
||
|
|
||
|
this.callContextInitializers = parent.NewBehaviorCollection<ICallContextInitializer>();
|
||
|
this.faultContractInfos = parent.NewBehaviorCollection<FaultContractInfo>();
|
||
|
this.parameterInspectors = parent.NewBehaviorCollection<IParameterInspector>();
|
||
|
this.isOneWay = true;
|
||
|
}
|
||
|
|
||
|
public DispatchOperation(DispatchRuntime parent, string name, string action, string replyAction)
|
||
|
: this(parent, name, action)
|
||
|
{
|
||
|
this.replyAction = replyAction;
|
||
|
this.isOneWay = false;
|
||
|
}
|
||
|
|
||
|
public bool IsOneWay
|
||
|
{
|
||
|
get { return this.isOneWay; }
|
||
|
}
|
||
|
|
||
|
public string Action
|
||
|
{
|
||
|
get { return this.action; }
|
||
|
}
|
||
|
|
||
|
public SynchronizedCollection<ICallContextInitializer> CallContextInitializers
|
||
|
{
|
||
|
get { return this.callContextInitializers; }
|
||
|
}
|
||
|
|
||
|
public SynchronizedCollection<FaultContractInfo> FaultContractInfos
|
||
|
{
|
||
|
get { return this.faultContractInfos; }
|
||
|
}
|
||
|
|
||
|
public bool AutoDisposeParameters
|
||
|
{
|
||
|
get { return this.autoDisposeParameters; }
|
||
|
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.autoDisposeParameters = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public IDispatchMessageFormatter Formatter
|
||
|
{
|
||
|
get { return this.formatter; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.formatter = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal IDispatchFaultFormatter FaultFormatter
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if (this.faultFormatter == null)
|
||
|
{
|
||
|
this.faultFormatter = new DataContractSerializerFaultFormatter(this.faultContractInfos);
|
||
|
}
|
||
|
return this.faultFormatter;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.faultFormatter = value;
|
||
|
this.isFaultFormatterSetExplicit = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal bool IncludeExceptionDetailInFaults
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.includeExceptionDetailInFaults;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
this.includeExceptionDetailInFaults = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal bool IsFaultFormatterSetExplicit
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.isFaultFormatterSetExplicit;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public ImpersonationOption Impersonation
|
||
|
{
|
||
|
get { return this.impersonation; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.impersonation = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal bool HasNoDisposableParameters
|
||
|
{
|
||
|
get { return this.hasNoDisposableParameters; }
|
||
|
set { this.hasNoDisposableParameters = value; }
|
||
|
}
|
||
|
|
||
|
internal IDispatchMessageFormatter InternalFormatter
|
||
|
{
|
||
|
get { return this.formatter; }
|
||
|
set { this.formatter = value; }
|
||
|
}
|
||
|
|
||
|
internal IOperationInvoker InternalInvoker
|
||
|
{
|
||
|
get { return this.invoker; }
|
||
|
set { this.invoker = value; }
|
||
|
}
|
||
|
|
||
|
public IOperationInvoker Invoker
|
||
|
{
|
||
|
get { return this.invoker; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.invoker = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsTerminating
|
||
|
{
|
||
|
get { return this.isTerminating; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.isTerminating = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal bool IsSessionOpenNotificationEnabled
|
||
|
{
|
||
|
get { return this.isSessionOpenNotificationEnabled; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.isSessionOpenNotificationEnabled = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public string Name
|
||
|
{
|
||
|
get { return this.name; }
|
||
|
}
|
||
|
|
||
|
public SynchronizedCollection<IParameterInspector> ParameterInspectors
|
||
|
{
|
||
|
get { return this.parameterInspectors; }
|
||
|
}
|
||
|
|
||
|
public DispatchRuntime Parent
|
||
|
{
|
||
|
get { return this.parent; }
|
||
|
}
|
||
|
|
||
|
internal ReceiveContextAcknowledgementMode ReceiveContextAcknowledgementMode
|
||
|
{
|
||
|
get;
|
||
|
set;
|
||
|
}
|
||
|
|
||
|
internal bool BufferedReceiveEnabled
|
||
|
{
|
||
|
get { return this.parent.ChannelDispatcher.BufferedReceiveEnabled; }
|
||
|
set { this.parent.ChannelDispatcher.BufferedReceiveEnabled = value; }
|
||
|
}
|
||
|
|
||
|
public bool ReleaseInstanceAfterCall
|
||
|
{
|
||
|
get { return this.releaseInstanceAfterCall; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.releaseInstanceAfterCall = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool ReleaseInstanceBeforeCall
|
||
|
{
|
||
|
get { return this.releaseInstanceBeforeCall; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.releaseInstanceBeforeCall = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public string ReplyAction
|
||
|
{
|
||
|
get { return this.replyAction; }
|
||
|
}
|
||
|
|
||
|
public bool DeserializeRequest
|
||
|
{
|
||
|
get { return this.deserializeRequest; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.deserializeRequest = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool SerializeReply
|
||
|
{
|
||
|
get { return this.serializeReply; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.serializeReply = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool TransactionAutoComplete
|
||
|
{
|
||
|
get { return this.transactionAutoComplete; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.transactionAutoComplete = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool TransactionRequired
|
||
|
{
|
||
|
get { return this.transactionRequired; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.transactionRequired = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsInsideTransactedReceiveScope
|
||
|
{
|
||
|
get { return this.isInsideTransactedReceiveScope; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.isInsideTransactedReceiveScope = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|