【问题标题】:Web service throwing an exception?Web服务抛出异常?
【发布时间】:2009-08-14 19:00:50
【问题描述】:

我有一个如下所示的 web 方法:

[WebMethod]
public int ImportData(System.Collections.Generic.List<Record> importRecords)
{
    int count = 0;
    if (importRecords != null && importRecords.Count > 0)
    {
        DataLayer datalayer = new DataLayer();
        foreach (Record rec in importRecords)
        {
            datalayer.InsertRecord(rec);
            count++;
        }
    }
    return count;
}

如果webservice方法抛出异常,是否会向调用该方法的客户端抛出异常?

【问题讨论】:

    标签: .net web-services exception-handling asmx


    【解决方案1】:

    是的,但它将是SoapException。例如,如果您获得NullReferenceException,您将不会在客户端获得NullReferenceException

    MSDN 上有更多关于 web 服务和异常的信息

    这里的关键是:

    一个 ASP.NET 客户端收到一个 SoapException,其详细信息被序列化为 Message 属性中的文本。

    这适用于不是SoapExceptions 的所有异常。如果你想以某种方式自定义异常,你可以创建一个带有适当细节的 SoapException,然后抛出它。然后 ASP.NET 将简单地将您的异常转发给客户端,而不是包装它。

    【讨论】:

    • 所以如果在数据层的某个地方我说 throw new SQLException("Error in access the database " + ex.ToString);客户端的异常将是带有我提供的错误消息的soapexception?
    • @zSysop - 是的,您应该正确地从异常中获取消息。只是不要依赖异常的“类型”。如果您想正确处理异常,则必须开始查看错误代码。
    【解决方案2】:

    如果抛出一个未处理的异常,.NET 会将异常转换为 SOAP 错误并将其发送给客户端。

    许多客户端(包括 .NET 客户端和 Java 客户端)会将 SOAP 错误转换为客户端的异常。对于 .NET ASMX 客户端,抛出的异常将是 SoapException。在 WCF 的情况下,它将是一个 FaultException。

    ASMX Web 服务不能正确支持 SOAP 错误。这意味着返回特定的 SOAP 错误很乏味,没有办法让错误显示在 WSDL 中,并且 ASMX 客户端只会看到 SoapException,而不会看到更具体的内容。

    这是尽快迁移到 WCF 的另一个原因,因为它完全支持 SOAP 错误。当然,另一个原因是微软已经宣布 ASMX 技术是“遗留技术”,他们不会在那里修复错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多