如何将契约行为应用于具有属性的服务

本文关键字:属性 服务 应用于 契约 | 更新日期: 2023-09-27 18:28:26

我已经完成了与这里的示例类似的所有操作:https://msdn.microsoft.com/en-us/library/system.servicemodel.description.icontractbehavior(v=vs.110).aspx

但我的TestContractBehaviorAttribute方法从未被调用:

这里有一个我放置断点的属性:

public class TestContractBehaviorAttribute : Attribute, IContractBehavior
{
    public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
    {
    }
    public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)
    {
    }
    public void ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
    }
    public void AddBindingParameters(ContractDescription contractDescription, ServiceEndpoint endpoint,
        BindingParameterCollection bindingParameters)
    {
    }
}

合同和带有属性标签的服务:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string GetData(int value);
}
[TestContractBehavior]
public class Service1 : IService1
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
}

在客户端的调用GetData被执行但行为属性方法没有被执行之后。

如何将契约行为应用于具有属性的服务

在Visual Studio中创建了一个新的WCF服务项目,并将TestContractBehavior添加到默认的Service1类中。

IContractBehavior方法在服务启动/托管期间被调用。对GetData的调用没有命中任何一个。这些是启动方法。

例如,要调试启动方法,可以在服务构造函数中添加Debugger.Launch();