| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- //-----------------------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace System.ServiceModel.Dispatcher
- {
- using System.Collections.Generic;
- using System.ServiceModel.Channels;
- using System.ServiceModel.Description;
- class OperationInvokerBehavior : IOperationBehavior
- {
- public OperationInvokerBehavior()
- {
- }
- void IOperationBehavior.Validate(OperationDescription description)
- {
- }
- void IOperationBehavior.AddBindingParameters(OperationDescription description, BindingParameterCollection parameters)
- {
- }
- void IOperationBehavior.ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch)
- {
- if (dispatch == null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("dispatch");
- }
- if (description == null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("description");
- }
- if (description.TaskMethod != null)
- {
- dispatch.Invoker = new TaskMethodInvoker(description.TaskMethod, description.TaskTResult);
- }
- else if (description.SyncMethod != null)
- {
- if (description.BeginMethod != null)
- {
- // both [....] and async methods are present on the contract, check the preference
- OperationBehaviorAttribute operationBehaviorAttribue = description.Behaviors.Find<OperationBehaviorAttribute>();
- if ((operationBehaviorAttribue != null) && operationBehaviorAttribue.PreferAsyncInvocation)
- {
- dispatch.Invoker = new AsyncMethodInvoker(description.BeginMethod, description.EndMethod);
- }
- else
- {
- dispatch.Invoker = new SyncMethodInvoker(description.SyncMethod);
- }
- }
- else
- {
- // only [....] method is present on the contract
- dispatch.Invoker = new SyncMethodInvoker(description.SyncMethod);
- }
- }
- else
- {
- if (description.BeginMethod != null)
- {
- // only async method is present on the contract
- dispatch.Invoker = new AsyncMethodInvoker(description.BeginMethod, description.EndMethod);
- }
- }
- }
- void IOperationBehavior.ApplyClientBehavior(OperationDescription description, ClientOperation proxy)
- {
- }
- }
- }
|