1 //-----------------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 //-----------------------------------------------------------------------------
5 namespace System.ServiceModel.Dispatcher
7 using System.Collections.Generic;
8 using System.ServiceModel.Channels;
9 using System.ServiceModel.Description;
11 class OperationInvokerBehavior : IOperationBehavior
13 public OperationInvokerBehavior()
17 void IOperationBehavior.Validate(OperationDescription description)
21 void IOperationBehavior.AddBindingParameters(OperationDescription description, BindingParameterCollection parameters)
25 void IOperationBehavior.ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch)
29 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("dispatch");
31 if (description == null)
33 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("description");
36 if (description.TaskMethod != null)
38 dispatch.Invoker = new TaskMethodInvoker(description.TaskMethod, description.TaskTResult);
40 else if (description.SyncMethod != null)
42 if (description.BeginMethod != null)
44 // both sync and async methods are present on the contract, check the preference
45 OperationBehaviorAttribute operationBehaviorAttribue = description.Behaviors.Find<OperationBehaviorAttribute>();
46 if ((operationBehaviorAttribue != null) && operationBehaviorAttribue.PreferAsyncInvocation)
48 dispatch.Invoker = new AsyncMethodInvoker(description.BeginMethod, description.EndMethod);
52 dispatch.Invoker = new SyncMethodInvoker(description.SyncMethod);
57 // only sync method is present on the contract
58 dispatch.Invoker = new SyncMethodInvoker(description.SyncMethod);
63 if (description.BeginMethod != null)
65 // only async method is present on the contract
66 dispatch.Invoker = new AsyncMethodInvoker(description.BeginMethod, description.EndMethod);
71 void IOperationBehavior.ApplyClientBehavior(OperationDescription description, ClientOperation proxy)