У меня есть пользовательское поведение, в котором я реализую «IParameterInspector», чтобы иметь возможность использовать BeforeCall и AfterCall.В настоящее время я использую эти методы для проверки перед выполнением вызова в моей службе WCF.
Вот мой атрибут:
[AttributeUsage(AttributeTargets.Class)]
public class SendReceiveBehaviorAttribute : Attribute, IServiceBehavior
{
public SendReceiveBehaviorAttribute()
{
}
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.ParameterInspectors.Add(MyInspector);
}
}
}
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
}
И мой инспектор:
internal class MyInspector: IParameterInspector
{
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
}
public object BeforeCall(string operationName, object[] inputs)
{
// Make some verifications and cancel if it fails.
return null;
}
}
РЕДАКТИРОВАТЬ Каков будет лучший способ прервать мой вызов, если моя проверка не пройдена?