我有一个WCF拦截器,每次请求都会调用它:
public class WebServiceInterceptor : IDispatchMessageInspector
{
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
var action = OperationContext.Current.IncomingMessageHeaders.Action;
var name = instanceContext.GetServiceInstance().GetType().Name;
if (action != null)
{
var operationName = action.Substring(action.LastIndexOf("/", StringComparison.OrdinalIgnoreCase) + 1);
}
return null;
}
public void BeforeSendReply(ref Message reply, object correlationState)
{
}
}
如何获取将被调用的Service类的Method名称? 我想从这个方法中获取一个属性。
答案 0 :(得分:1)
所有字符串处理都是黑客且不可靠。学习使用WCF为您提供的元数据。您不需要解析类型名称之外的任何内容。
当您注册此IDispatchMessageInspector
时,您可能拥有必要的元数据(例如OperationDescription
)。将该信息传递给类构造函数并将其存储在实例字段中。这样,AfterReceiveRequest
以后可以使用该信息。
答案 1 :(得分:0)
我在这里找到答案:https://stackoverflow.com/a/5150194/1453662
string methodName = OperationContext.Current.IncomingMessageProperties["HttpOperationName"] as string;
MethodInfo info = instanceContext.GetServiceInstance().GetType().GetMethod(methodName);
这不适用于SOAP请求(我们只使用http)