305 lines
8.4 KiB
C#
305 lines
8.4 KiB
C#
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
namespace System.ServiceModel.Dispatcher
|
||
|
{
|
||
|
using System;
|
||
|
using System.Reflection;
|
||
|
using System.Collections.Generic;
|
||
|
using System.ComponentModel;
|
||
|
using System.Diagnostics.CodeAnalysis;
|
||
|
|
||
|
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Compat", Justification = "Compat is an accepted abbreviation")]
|
||
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
||
|
public class ClientOperationCompatBase
|
||
|
{
|
||
|
internal ClientOperationCompatBase() { }
|
||
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
||
|
[Obsolete("This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.", true)]
|
||
|
public IList<IParameterInspector> ParameterInspectors
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.parameterInspectors;
|
||
|
}
|
||
|
}
|
||
|
internal SynchronizedCollection<IParameterInspector> parameterInspectors;
|
||
|
}
|
||
|
|
||
|
public sealed class ClientOperation : ClientOperationCompatBase
|
||
|
{
|
||
|
string action;
|
||
|
SynchronizedCollection<FaultContractInfo> faultContractInfos;
|
||
|
bool serializeRequest;
|
||
|
bool deserializeReply;
|
||
|
IClientMessageFormatter formatter;
|
||
|
IClientFaultFormatter faultFormatter;
|
||
|
bool isInitiating = true;
|
||
|
bool isOneWay;
|
||
|
bool isTerminating;
|
||
|
bool isSessionOpenNotificationEnabled;
|
||
|
string name;
|
||
|
|
||
|
ClientRuntime parent;
|
||
|
string replyAction;
|
||
|
MethodInfo beginMethod;
|
||
|
MethodInfo endMethod;
|
||
|
MethodInfo syncMethod;
|
||
|
MethodInfo taskMethod;
|
||
|
Type taskTResult;
|
||
|
bool isFaultFormatterSetExplicit = false;
|
||
|
|
||
|
public ClientOperation(ClientRuntime parent, string name, string action)
|
||
|
: this(parent, name, action, null)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public ClientOperation(ClientRuntime parent, string name, string action, string replyAction)
|
||
|
{
|
||
|
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.replyAction = replyAction;
|
||
|
|
||
|
this.faultContractInfos = parent.NewBehaviorCollection<FaultContractInfo>();
|
||
|
this.parameterInspectors = parent.NewBehaviorCollection<IParameterInspector>();
|
||
|
}
|
||
|
|
||
|
public string Action
|
||
|
{
|
||
|
get { return this.action; }
|
||
|
}
|
||
|
|
||
|
public SynchronizedCollection<FaultContractInfo> FaultContractInfos
|
||
|
{
|
||
|
get { return this.faultContractInfos; }
|
||
|
}
|
||
|
|
||
|
public MethodInfo BeginMethod
|
||
|
{
|
||
|
get { return this.beginMethod; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.beginMethod = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public MethodInfo EndMethod
|
||
|
{
|
||
|
get { return this.endMethod; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.endMethod = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public MethodInfo SyncMethod
|
||
|
{
|
||
|
get { return this.syncMethod; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.syncMethod = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public IClientMessageFormatter Formatter
|
||
|
{
|
||
|
get { return this.formatter; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.formatter = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal IClientFaultFormatter 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 IsFaultFormatterSetExplicit
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.isFaultFormatterSetExplicit;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal IClientMessageFormatter InternalFormatter
|
||
|
{
|
||
|
get { return this.formatter; }
|
||
|
set { this.formatter = value; }
|
||
|
}
|
||
|
|
||
|
public bool IsInitiating
|
||
|
{
|
||
|
get { return this.isInitiating; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.isInitiating = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsOneWay
|
||
|
{
|
||
|
get { return this.isOneWay; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.isOneWay = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsTerminating
|
||
|
{
|
||
|
get { return this.isTerminating; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.isTerminating = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public string Name
|
||
|
{
|
||
|
get { return this.name; }
|
||
|
}
|
||
|
|
||
|
public ICollection<IParameterInspector> ClientParameterInspectors
|
||
|
{
|
||
|
get { return this.ParameterInspectors; }
|
||
|
}
|
||
|
|
||
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
||
|
public new SynchronizedCollection<IParameterInspector> ParameterInspectors
|
||
|
{
|
||
|
get { return this.parameterInspectors; }
|
||
|
}
|
||
|
|
||
|
public ClientRuntime Parent
|
||
|
{
|
||
|
get { return this.parent; }
|
||
|
}
|
||
|
|
||
|
public string ReplyAction
|
||
|
{
|
||
|
get { return this.replyAction; }
|
||
|
}
|
||
|
|
||
|
public bool SerializeRequest
|
||
|
{
|
||
|
get { return this.serializeRequest; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.serializeRequest = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool DeserializeReply
|
||
|
{
|
||
|
get { return this.deserializeReply; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.deserializeReply = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public MethodInfo TaskMethod
|
||
|
{
|
||
|
get { return this.taskMethod; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.taskMethod = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Type TaskTResult
|
||
|
{
|
||
|
get { return this.taskTResult; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.taskTResult = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal bool IsSessionOpenNotificationEnabled
|
||
|
{
|
||
|
get { return this.isSessionOpenNotificationEnabled; }
|
||
|
set
|
||
|
{
|
||
|
lock (this.parent.ThisLock)
|
||
|
{
|
||
|
this.parent.InvalidateRuntime();
|
||
|
this.isSessionOpenNotificationEnabled = value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|