J'ai un service Web asp.net classique (asmx) et une méthode web. J'ai besoin de lancer une exception personnalisée pour certains cas dans ma méthode Web, et j'ai besoin d'attraper cette exception personnalisée spécifique où j'appelle la méthode de service Web.Attraper une exception personnalisée lancée par un WebMethod sur 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);
}
}
}
entrée, de sortie et les classes d'exception comme échantillon:
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) { }
}
Du côté client, j'ai besoin:
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
}
}
Cependant, je ne peux pas le faire parce que quand j'ajoute la référence de service Web sur le client, j'ai classe de service, classes d'entrée et de sortie, mais je n'ai pas de classe d'exception personnalisée.
également un autre problème est que, j'ai aussi des problèmes avec la sérialisation classe d'exception (en raison de la propriété Exception.Data implémente l'interface IDictionary)
Est-il possible de le faire à ma façon, ou suis-je dans un environnement complètement mal, ou y a-t-il quelque chose qui me manque sur les fondamentaux des services web?
Merci.
Vous devez définir customErrors mode = 'RemoteOnly' ou 'On' sur votre site Web.config – eddy