我已经实现了 IOperationInvoker 来自定义 WCF 调用。
在 Invoke 方法中,我想访问由 OperationInvoker 调用的方法的自定义属性。
我已经编写了以下代码。
但是,它没有提供在该方法上指定的自定义属性。

public MyOperationInvoker(IOperationInvoker operationInvoker, DispatchOperation dispatchOperation)
{
            this.operationInvoker = operationInvoker;
}

public object Invoke(object instance, object[] inputs, out object[] outputs)
{
   MethodInfo mInfo=(MethodInfo)this.operationInvoker.GetType().GetProperty("Method").
                     GetValue(this.operationInvoker, null);
object[] objCustomAttributes = methodInfo.GetCustomAttributes(typeof(MyAttribute), true);

}

最佳答案

在运行时,OperationInvoker 的类型为 SyncMethodInvoker,其中包含 MethodInfo。但是由于它的保护级别,我们不能将 OperationInvoker 转换为 SyncMethodInvoker。但是,OperationDescription 中有一个 MethodInfo 对象。所以我通常做的就是将 IOperationBehavior.ApplyDispatchBehavior 方法中的 MethodInfo 传入 CustomOperationInvoker 的构造函数中。

public class OperationBehaviourInterceptor : IOperationBehavior
{
  public void ApplyDispatchBehavior(OperationDescription operationDescription, System.ServiceModel.Dispatcher.DispatchOperation dispatchOperation)
  {
    MethodInfo currMethodInfo = operationDescription.SyncMethod;

    var oldInvoker = dispatchOperation.Invoker;
    dispatchOperation.Invoker = new OperationInvokerBase(oldInvoker,currMethodInfo);
  }

  // other method
}

public class CustomOperationInvoker : IOperationInvoker
{
  private IOperationInvoker oldInvoker;
  private MethodInfo methodInfo;
  public CustomOperationInvoker(IOperationInvoker oldOperationInvoker, MethodInfo info)
  {
    this.oldInvoker = oldOperationInvoker;
    this.methodInfo = info;
  }

  // then you can access it
}

关于wcf - 在 IOperationInvoker 实现中访问 MethodInfo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6983745/

10-12 03:58