2014-11-25 61 views
0

我是WCF的新手,尝试使用WebHttpBinding绑定来构建演示WCF项目。在客户端获取Fault异常

项目工作正常,但我坚持故障例外的概念。下面是我用来生成错误异常的代码,但在客户端,我得到的是(400)错误请求错误,并且InnerException为空。我哪里错了?

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"); 
     } 
    } 
+0

你是从你的WCF服务抛出'FaultException'吗? – 2014-11-25 05:33:22

+0

是的..我从WCF服务 – Tweety01 2014-11-25 05:42:13

回答

0

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

没有内部异常,当你提高FaultException,因为FaultException一个核心概念是,它可以跨越技术(互操作性)&内部异常的概念是非常具体的.NET。

如果您确实想要通过Exception,您可以使用FaultException,它允许您指定一个通用参数,然后将其设置为Exception。然后你会创建并提出。

要记住的另一个方面是你如何处理你的错误,在你的代码中抛出一个全新的异常。这意味着变量ex中的所有信息都会丢失。除非你打算隐瞒的东西,你可以试试这个

catch (FaultException ex) 
{ 
    throw; 
} 

此选项将原始FaultException,并再次引发它,从而保持在它的所有信息。

最后,在你的问题之外,这个SQL让我害怕 - 看起来它可能容易受到SQL injection attack的影响 - 只是你可能想要检查的东西。

+0

提高它感谢您的解释罗伯特..但是如果我必须显示实际的错误给用户....如假设我们已经在服务中划分操作,如果用户传递数字0 .. ..然后我想向用户显示自定义消息...并且SQL仅用于本地测试目的。 – Tweety01 2014-11-25 05:44:50

+0

添加了有关FaultException 的信息,这可能是您想要的 – 2014-11-25 05:53:20