Tengo un servicio web asp.net clásico (asmx) y un método web en él. Necesito arrojar una excepción personalizada para algún caso en mi método web, y necesito detectar esa excepción personalizada específica donde llamo al método de servicio web.Captura de una excepción personalizada lanzada por un WebMethod en ASP.NET WebService
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
[WebMethod]
public HelloWorldOutput HelloWorld(HelloWorldInput input)
{
try
{
// My Code
return new HelloWorldOutput();
}
catch (Exception ex)
{
throw new HelloWorldException("Hello World Exception", ex);
}
}
}
clases de entrada, de salida y de excepción como una muestra:
public class HelloWorldInput { }
public class HelloWorldOutput { }
[Serializable]
public class HelloWorldException : Exception
{
public HelloWorldException() { }
public HelloWorldException(string message) : base(message) { }
public HelloWorldException(string message, Exception inner)
: base(message, inner) { }
protected HelloWorldException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
: base(info, context) { }
}
En el lado del cliente, que necesitan:
public static void Main()
{
WebService service = new WebService();
try
{
service.HelloWorld(new HelloWorldInput());
}
catch (HelloWorldException ex)
{
// Do sth with HelloWorldException
}
catch (Exception ex)
{
// Do sth with Exception
}
}
Sin embargo, no puedo hacer eso porque cuando agrego el referencia del servicio web en el cliente, tengo clase de servicio, clases de entrada y salida, pero no tengo clase de excepción personalizada.
También otro problema es que, también tengo problemas con la serialización de la clase de excepción (a causa de la propiedad Exception.Data implementa la interfaz IDictionary)
¿Hay una manera de hacer esto en mi camino, o estoy en un completamente manera incorrecta, o hay algo que extraño sobre los fundamentos de los servicios web?
Gracias.
Debe establecer customErrors mode = 'RemoteOnly' o 'On' en su web.config – eddy