c# - 如何在 AfterReceiveRequest 中调用服务方法

标签 c# wcf interceptor

我有一个 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)
    {
    }
}

如何获取将要调用的服务类的方法名称? 我想从此方法中获取一个属性。

最佳答案

所有这些字符串处理都是 hack 和不可靠的。学习使用 WCF 为您提供的元数据。您不需要解析类型名称之外的任何内容。

当您注册此 IDispatchMessageInspector 时,您可能拥有可用的必要元数据(例如 OperationDescription)。将该信息传递给您的类构造函数并将其存储在实例字段中。这样,AfterReceiveRequest 以后就可以使用该信息。

关于c# - 如何在 AfterReceiveRequest 中调用服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955257/

相关文章:

c# - ASP.NET Core线程中默认的IServiceProvider安全吗?

c# - 将数组从 C# 传递到 C++ 的问题

c# - 使用接口(interface)进行远程或 WCF 的新开发(在同一台机器上的两个 .NET 应用程序之间)?

wcf - WCF 中同一服务的多个服务行为

java - 从基类引用调用时,扩展类中的 CDI 拦截器不起作用

c# - 在接口(interface)上拦截

c# - 从命令行编译 C# 代码会出错

c# - 在不使用属性网格控件的情况下使用 .NET 集合编辑器

c# - WCF channel 和 ChannelFactory 缓存

grpc - 如何将数据从 grpc rpc 调用传递到 java 中的服务器拦截器