No se puede hacer esto: Servicios
- Web hacen errores SOAP. Las excepciones son específicas de la plataforma.
- Cuando no se gestiona una excepción en un servicio web ASMX, .NET la traducirá en una falla SOAP. Los detalles de la excepción no están serializados.
- En un cliente ASMX, un error SOAP se traducirá a SoapException.
Los servicios web ASMX no cuentan con el soporte adecuado para Fallas SOAP. No hay forma de obtener ninguna excepción que no sea SoapException en el lado del cliente.
Otra razón más para actualizar a WCF.
Como un ejemplo de lo que no puede hacer con ASMX, así es como funciona WCF. WCF le permite especificar, para cada operación de servicio web, que los fallos que pueda volver:
[ServiceContract]
public interface IMyServiceContract
{
[FaultContract(typeof(IntegerZeroFault))]
[FaultContract(typeof(SomeOtherFault))]
[OperationContract]
public string GetSomeString(int someInteger);
}
[DataContract]
public class IntegerZeroFault
{
[DataMember]
public string WhichInteger {get;set;}
}
[DataContract]
public class SomeOtherFault
{
[DataMember]
public string ErrorMessage {get;set;}
}
public class MyService : IMyServiceContract
{
public string GetSomeString(int someInteger)
{
if (someInteger == 0)
throw new FaultException<IntegerZeroFault>(
new IntegerZeroFault{WhichInteger="someInteger"});
if (someInteger != 42)
throw new FaultException<SomeOtherFault>(
new SomeOtherFault{ErrorMessage ="That's not the anaswer"});
return "Don't panic";
}
}
Un cliente WCF puede entonces coger FaultException<SomeOtherFault>
, por ejemplo. Cuando lo intenté con un cliente Java, fue capaz de detectar SomeOtherFault
, que IBM Rational Web Developer creó para derivar de la clase Java Exception
.
Está usando ASMX. Lo llama "ASP.NET Web Services" –
Ah bien ... pensé que estaba usando WCF –