在客户端获取Fault异常

时间:2014-11-25 05:28:58

标签: c# wcf faultexception

我是WCF的新手并尝试使用WebHttpBinding绑定构建演示WCF项目。

项目工作正常,但我遇到了故障异常的概念。下面是我用于生成错误异常的代码,但在客户端,我得到的是(400)Bad Request 错误,而InnerException为null。我哪里出错?

    public DataTable GetCreativesData(string id,string type)
    {
        try { 
        DataAccess da = new DataAccess();
        string qryStr = @"select * from dbo.tbMyTable";
        if (type != null && type != "")
            qryStr += " WHERE1 type='"+type+"'";
        DataTable dt = da.GetDataTable(qryStr);
        return dt;
        }

       catch (FaultException ex) {
            throw new FaultException("Improper Query");
        }
     }

1 个答案:

答案 0 :(得分:0)

400错误对于故障异常是正确的,因为您向用户指示他们提供的内容可能有问题。

提升FaultException时没有内部异常,因为FaultException的核心概念是它跨技术(互操作性)和内部异常的概念非常特定于.NET。

如果您真的想要传递Exception,可以使用FaultException来指定通用参数,然后将其设置为Exception。然后你会创建并提高它。

要记住的另一个方面是你如何处理你的错误,在你的代码中你抛出了一个全新的例外。这意味着变量ex中的所有信息都将丢失。除非你打算隐藏某些东西,否则你可以试试这个

catch (FaultException ex) 
{
    throw;
}

此选项采用原始FaultException并再次引发它,从而保留其中的所有信息。

最后,在您的问题之外,SQL让我感到害怕 - 看起来它可能容易受到SQL injection attack的攻击 - 只是您可能要查看的内容。