//----------------------------------------------------------------------------- // 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 ParameterInspectors { get { return this.parameterInspectors; } } internal SynchronizedCollection parameterInspectors; } public sealed class ClientOperation : ClientOperationCompatBase { string action; SynchronizedCollection 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(); this.parameterInspectors = parent.NewBehaviorCollection(); } public string Action { get { return this.action; } } public SynchronizedCollection 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 ClientParameterInspectors { get { return this.ParameterInspectors; } } [EditorBrowsable(EditorBrowsableState.Never)] public new SynchronizedCollection 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; } } } } }