C# 连接到wcf管道

C# 连接到wcf管道,c#,asp.net,wcf,C#,Asp.net,Wcf,是否有方法检查wcf方法调用。我指的是asp.net中与HttpModule相等的任何内容 我希望在任何方法调用之前执行一个方法。WCF有一个非常可扩展的体系结构。可以截取和自定义许多WCF功能来完成您自己的事情 对于您的情况,您必须编写适当的服务或端点行为。从传输通道接收消息和调用服务方法之间的过程称为分派。WCF使用一组行为来执行分派。您可以提供自己的行为来检查方法调用 本文提供了一个极好的概述和示例- 我还建议您仔细阅读此WCF体系结构概述,这取决于您希望在消息中检查或修改的内容。若您想在

是否有方法检查wcf方法调用。我指的是asp.net中与HttpModule相等的任何内容


我希望在任何方法调用之前执行一个方法。

WCF有一个非常可扩展的体系结构。可以截取和自定义许多WCF功能来完成您自己的事情

对于您的情况,您必须编写适当的服务或端点行为。从传输通道接收消息和调用服务方法之间的过程称为分派。WCF使用一组行为来执行分派。您可以提供自己的行为来检查方法调用

本文提供了一个极好的概述和示例-


我还建议您仔细阅读此WCF体系结构概述,这取决于您希望在消息中检查或修改的内容。若您想在编码级别修改某些内容,可以选择自定义消息编码器,若在请求反序列化之前或在向客户端发送回复之前,请使用自定义消息检查器

HTH.

可能就是您所寻找的:

public class MyOperationInvoker : IOperationInvoker
{
    IOperationInvoker originalInvoker;
    public MyOperationInvoker(IOperationInvoker originalInvoker)
    {
        this.originalInvoker = originalInvoker;
    }

    public bool IsSynchronous { get { return originalInvoker.IsSynchronous; } }

    public object[] AllocateInputs() { return originalInvoker.AllocateInputs(); }

    public object Invoke(object instance, object[] inputs, out object[] outputs)
    {
        //Do stuff before call
        var res = this.originalInvoker.Invoke(instance, inputs, out outputs);
        //stuff after call
        return res;
    }

    public IAsyncResult InvokeBegin(object instance, object[] inputs,
                AsyncCallback callback, object state)
    {
        //Do stuff before async call
        var res = this.originalInvoker.InvokeBegin(instance, inputs, callback, state);
        return res;
    }

    public object InvokeEnd(object instance, out object[] outputs, IAsyncResult result)
    {
        var res = this.InvokeEnd(instance, out outputs, result);
        //Do stuff after async call
        return res;
    }
}
作为服务中所有操作的属性实现:

public class MyBehaviorAttribute : Attribute, IServiceBehavior, IOperationBehavior
{
    //IOperationBehavior
    public void ApplyDispatchBehavior(OperationDescription operationDescription,
            DispatchOperation dispatchOperation)
    {
        dispatchOperation.Invoker = new MyOperationInvoker(dispatchOperation.Invoker);
    }

    public void AddBindingParameters(OperationDescription operationDescription,
            BindingParameterCollection bindingParameters) { /*Do nothing*/ }

    public void ApplyClientBehavior(OperationDescription operationDescription,
            ClientOperation clientOperation) { /*Do nothing*/ }

    public void Validate(OperationDescription operationDescription) { /*Do nothing*/ }

    //IServiceBehavior
    public void Validate(ServiceDescription serviceDescription,
                ServiceHostBase serviceHostBase) { /*Do nothing*/ }

    public void AddBindingParameters(ServiceDescription serviceDescription,
                ServiceHostBase serviceHostBase,
                Collection<ServiceEndpoint> endpoints,
                BindingParameterCollection bindingParameters) { /*Do nothing*/ }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription,
                ServiceHostBase serviceHostBase)
    {
        foreach (ServiceEndpoint endpoint in serviceHostBase.Description.Endpoints)
        {
            foreach (var operation in endpoint.Contract.Operations)
            {
                operation.Behaviors.Add(this);
            }
        }
    }
[MyBehavior]
public class HelloService : IHelloService
{
    ...
}

第一个环节断了。