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