Web服务抛出异常?

时间:2009-08-14 19:00:51

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

我有一个看起来像这样的网络方法:

[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方法上抛出异常,是否会将异常抛回给调用该方法的客户端?

2 个答案:

答案 0 :(得分:3)

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

有关MSDN

上的网络服务和例外的更多信息

这里的关键是:

  

ASP.NET客户端收到SoapException,并在Message属性中将详细信息序列化为文本。

这适用于非SoapException s的所有异常。如果要以某种方式自定义异常,可以使用适当的详细信息创建SoapException,然后抛出该异常。然后ASP.NET将简单地将您的异常转发给客户端而不是包装它。

答案 1 :(得分:2)

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

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

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

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