我已经完成了与这里的示例类似的所有操作: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();
。