【问题标题】:To get Fault exception on client side在客户端获取故障异常
【发布时间】:2014-11-25 05:28:57
【问题描述】:

我是 WCF 新手,正在尝试使用 WebHttpBinding 绑定构建演示 WCF 项目。

项目运行良好,但我坚持错误异常的概念。下面是我用来生成故障异常的代码,但在客户端我得到的是 (400) Bad Request 错误并且 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");
        }
     }

【问题讨论】:

  • 你是从 WCF 服务中抛出 FaultException 吗?
  • 是的..我是从 WCF 服务提出的

标签: c# wcf faultexception


【解决方案1】:

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

当您提出FaultException 时没有内部异常,因为FaultException 的核心概念是它可以跨技术工作(互操作性)并且内部异常的概念非常特定于.NET。

如果您真的想向下传递Exception,可以使用FaultException,它允许您指定一个通用参数,然后将其设置为Exception。然后,您将创建并提高它。

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

catch (FaultException ex) 
{
    throw;
}

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

最后,除了你的问题之外,SQL 让我感到害怕 - 看起来它可能容易受到 SQL injection attack 的攻击 - 只是你可能想要检查的东西。

【讨论】:

  • 谢谢你的解释罗伯特..但是如果我必须向用户显示实际错误怎么办......就像假设我们在服务中有划分操作并且如果用户通过数字 0....那么我想向用户显示自定义消息...并且 SQL 仅用于本地测试目的..
  • 添加了有关 FaultException 的信息,这可能是您想要的
猜你喜欢
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
相关资源
最近更新 更多