WCF IParameterInspector返回响应对象

时间:2011-02-17 13:45:07

标签: wcf

我有一个WCF服务,它在调用实际服务方法(WCF提供者端)之前使用IParameterInspector挂钩进行输入参数验证。一切都运行良好,我通过FaultException异常返回验证错误。我的问题是,是否可以返回带有验证错误的对象而不是异常?请参阅以下代码段:

public object BeforeCall(string operationName, object[] inputs)
    {
        var errors = new List<string>();

        // Validate each input parameter
        foreach (var entity in inputs)
        {
            // executing bunch of IValidator<T>'s
        }

        if (errors.Count != 0)
        {
            ////throw new FaultException<List<string>>(errors, "Input parameter validation error");
            return new Response<object>(null, errors);
        }
        else
        {
            return null;
        }
    }

这显然不起作用 - 我的问题是,是否可以从BeforeCall(WCF提供商端)向comsumer返回响应对象?

2 个答案:

答案 0 :(得分:0)

就我而言,您无法返回自定义对象。因为返回值的目的是允许BeforeCall方法与AfterCall方法相关联。从BeforeCall返回的值将传递到相应的AfterCall。具体来说,它位于correlationState参数中。

但是,您可以使用FaultException<T>,其中T是您的自定义对象,但验证错误。

您需要按如下方式定义自定义类:

public class DemoFault
{
[DataMember()]
public string ErrorText;
public DemoFault(string errorMessage)
{
ErrorText = errorMessage;
}
}

try
{
//blah blah blah
}
catch (FaultException<DemoFault> helloFault)
{
Console.WriteLine(hellofault.Detail.ErrorText);
}

答案 1 :(得分:0)

这很有趣,为什么不向您的Web服务添加错误契约,让它在不拦截任何内容的情况下执行验证。如果出现问题,它将通过合同产生真正的错误。这很正常。

出于您的原因,您可以在内部List<string>创建自定义故障,客户可以轻松处理以显示错误。