我有一个看起来像这样的网络方法:
[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方法上抛出异常,是否会将异常抛回给调用该方法的客户端?
答案 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技术是“传统技术”,他们不会修复那里的错误。