Это заняло у меня целую вечность, но я нашел способ, который лучше, чем поиск и прохождение через весь контракт:
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);
И вот вы здесь. Вы можете получить атрибуты или делать все что угодно.
Примечание: у вас может возникнуть желание использовать OperationSelector в DispatchRuntime. Проблема, которую я обнаружил, заключалась в том, что в моем случае, на определенном этапе обработки, OperationSelector был нулевой ссылкой. Если у вас есть доступ к этому свойству, возможно, его быстрее и надежнее использовать, чем «сканировать» коллекцию OperationCollection, как указано выше.