WCF: Retrieving MethodInfo from OperationContext

后端 未结 4 1428
猫巷女王i
猫巷女王i 2020-12-13 07:20

Is there an elegant way to get the method that will be executed on a service instance from MessageInspector/AuthorizationPolicy/some other extension point? I could use

4条回答
  •  佛祖请我去吃肉
    2020-12-13 07:53

    It took me forever, but I did find a way that's better than finding and slogging through the entire contract:

    string action = operationContext.IncomingMessageHeaders.Action;
    DispatchOperation operation = 
        operationContext.EndpointDispatcher.DispatchRuntime.Operations.FirstOrDefault(o =>
            o.Action == action);
    // Insert your own error-handling here if (operation == null)
    Type hostType = operationContext.Host.Description.ServiceType;
    MethodInfo method = hostType.GetMethod(operation.Name);
    

    And there you are. You can get the attributes or do whatever else you like.

    Note: You might be tempted to try to use the OperationSelector in the DispatchRuntime. The problem I found was that in my case, at the particular stage of processing, the OperationSelector was a null reference. If you have access to this property, it's probably faster and more reliable to use than "scanning" the OperationCollection as above.

提交回复
热议问题