| File: FrameworkFork\System.ServiceModel\System\ServiceModel\Description\TransactionFlowAttribute.cs | Web Access |
| Project: src\src\dotnet-svcutil\lib\src\dotnet-svcutil-lib.csproj (dotnet-svcutil-lib) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. namespace System.ServiceModel { using System.Collections.Generic; using System.ServiceModel.Dispatcher; using System.ServiceModel.Description; using System.Reflection; using System.Runtime.Serialization; using System.ServiceModel.Channels; [AttributeUsage(ServiceModelAttributeTargets.OperationBehavior)] public sealed class TransactionFlowAttribute : Attribute, IOperationBehavior { private TransactionFlowOption _transactions; public TransactionFlowAttribute(TransactionFlowOption transactions) { TransactionFlowBindingElement.ValidateOption(transactions); _transactions = transactions; } public TransactionFlowOption Transactions { get { return _transactions; } } internal static void OverrideFlow(BindingParameterCollection parameters, string action, MessageDirection direction, TransactionFlowOption option) { Dictionary<DirectionalAction, TransactionFlowOption> dictionary = EnsureDictionary(parameters); DirectionalAction da = new DirectionalAction(direction, action); if (dictionary.ContainsKey(da)) { dictionary[da] = option; } else { dictionary.Add(da, option); } } private static Dictionary<DirectionalAction, TransactionFlowOption> EnsureDictionary(BindingParameterCollection parameters) { Dictionary<DirectionalAction, TransactionFlowOption> dictionary = parameters.Find<Dictionary<DirectionalAction, TransactionFlowOption>>(); if (dictionary == null) { dictionary = new Dictionary<DirectionalAction, TransactionFlowOption>(); parameters.Add(dictionary); } return dictionary; } private void ApplyBehavior(OperationDescription description, BindingParameterCollection parameters) { Dictionary<DirectionalAction, TransactionFlowOption> dictionary = EnsureDictionary(parameters); dictionary[new DirectionalAction(description.Messages[0].Direction, description.Messages[0].Action)] = _transactions; } void IOperationBehavior.Validate(OperationDescription description) { } void IOperationBehavior.ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch) { } void IOperationBehavior.AddBindingParameters(OperationDescription description, BindingParameterCollection parameters) { if (parameters == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("parameters"); ApplyBehavior(description, parameters); } void IOperationBehavior.ApplyClientBehavior(OperationDescription description, ClientOperation proxy) { } } }