gpt4 book ai didi

c# - 将 WCF 属性应用于服务中的所有方法

转载 作者:可可西里 更新时间:2023-11-01 09:07:43 24 4
gpt4 key购买 nike

我有一个自定义属性,我想将其应用到我的 WCF 服务中的每个方法。

我是这样进行的:

[MyAttribute]
void MyMethod()
{

}

问题是我的服务包含数百个方法,我不想在所有方法之上写 [Attribute]。有没有办法将该属性应用于我服务中的所有方法?

这是我的属性签名:

//[AttributeUsage(AttributeTargets.Class)]
public class SendReceiveBehaviorAttribute : Attribute, /*IServiceBehavior,*/ IOperationBehavior

在 Aliostad 回答后编辑:

我试过这个:

public void ApplyDispatchBehavior(ServiceDescription desc, ServiceHostBase host)
{
foreach (ChannelDispatcher cDispatcher in host.ChannelDispatchers)
{
foreach (EndpointDispatcher eDispatcher in cDispatcher.Endpoints)
{
foreach (DispatchOperation op in eDispatcher.DispatchRuntime.Operations)
{
op.Invoker = new OperationInvoker(op.Invoker);
}
}
}
}

还有:

public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
foreach (ChannelDispatcher cDispatcher in serviceHostBase.ChannelDispatchers)
{
foreach (EndpointDispatcher eDispatcher in cDispatcher.Endpoints)
{
foreach (DispatchOperation op in eDispatcher.DispatchRuntime.Operations)
{
op.Invoker = new OperationInvoker(op.Invoker);
}
}
}
}

但是还是不行。

最佳答案

下面应该通过使用服务行为来添加调用调用程序的正确操作行为来达到目的。

public class MyAttribute : Attribute, IServiceBehavior, IOperationBehavior
{
#region IServiceBehavior Members
public void ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase host)
{
foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
{
foreach (var operation in endpoint.Contract.Operations)
{
operation.Behaviors.Add(this);
}
}
}
...
#endregion

#region IOperationBehavior Members
public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
{
dispatchOperation.Invoker = new OperationInvoker(dispatchOperation.Invoker);
}
...
#endregion
}

关于c# - 将 WCF 属性应用于服务中的所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5475350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com