有没有一种优雅的方式来获取在MessageInspector / AuthorizationPolicy /其他一些扩展点的服务实例上执行的方法?我可以用 OperationContext.Current.IncomingMessageHeaders.Action 但是我希望有一些方法可以
OperationContext.Current.IncomingMessageHeaders.Action
但是我希望有一些方法可以手动将SOAP操作与OperationContracts进行匹配。
我想要做的是在执行方法之前检查方法的属性。
它花了我永远,但我确实找到了一种比找到和扼杀整个合同更好的方式: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);
你在那里您可以获得属性或做任何你喜欢的任何事情。
注意:您可能会试图在DispatchRuntime中使用OperationSelector。我发现的问题是在我的情况下,在处理的特定阶段,OperationSelector是一个空引用。如果您有权访问此属性,则可能比“扫描”OperationCollection更快,更可靠。