Fangen Sie eine benutzerdefinierte Ausnahme, die ausgelöst durch eine WebMethod auf ASP.NET WebService
Ich habe eine klassische asp.net web service (asmx) und einer web-Methode. Ich brauche zu werfen, eine benutzerdefinierte Ausnahme für einen Fall in meinem web-Methode, und ich brauche, um zu fangen, dass spezifische benutzerdefinierte Ausnahme, wo ich den Aufruf der web service Methode.
[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);
}
}
}
Input -, output-und exception-Klassen ein Beispiel:
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) { }
}
In der client-Seite, die ich brauche:
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
}
}
Kann ich jedoch nicht tun, weil, wenn ich die web service Referenz im client, ich habe die service-Klasse, input-und output-Klassen, aber ich habe keine eigene exception-Klasse.
Auch ein weiteres problem ist, ich habe auch Probleme mit dem serialisieren Exception-Klasse (wegen der Ausnahme.Data-Eigenschaft implementiert IDictionary-Schnittstelle)
Gibt es eine Möglichkeit, dies zu tun, auf meine Weise, oder ich bin in einer völlig falschen Weg, oder gibt es etwas, was ich vermisse über die Grundlagen von web-services?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
ASP.NET Web Service werfen kann jede Art von exceptions: SoapException, HelloWorldException oder soever. Aber die Ausnahme ist die serialisierten Daten in eine SOAP-Fault-element, und zwar unabhängig von der Art der Ausnahme, die geworfen in den Dienst, die Ausnahme ist die Umwandlung in eine SoapException während der Deserialisierung. Daher ist es nicht möglich, fangen die HelloWorldException mit meinem catch-block in meiner Frage, auch wenn ich das bereitstellen der HelloWorldException an den client.
Für eine ASP.NET client, der einzige Weg ist, um die Ausnahme zu fangen als SoapException und behandeln Sie es durch seine
Actor
oderSoapFaultSubCode
Eigenschaft.Habe ich im Grunde mein problem gelöst wie folgt:
Web-Service:
Client:
Zusammen mit dem Dokument, das Bryce Fischer schrieb in seiner Antwort; diese msdn-Dokumenten hat auch hilfreiche Informationen über das werfen und handling von web-service-Ausnahmen.
Gewusst wie: auslösen von Ausnahmen von einem Web-Service Erstellt Mit ASP.NET
Gewusst wie: Behandeln von Ausnahmen, die von einem Web-Service-Methode
Diese Hilfe sein können. Sieht aus wie bekommen Sie eine SoapException, aber Sie können überprüfen Sie die details, um festzustellen, ob Ihre Klasse oder nicht.
Seite beachten, um Zugang zu "HelloWorldException", können Sie ziehen Sie es heraus in ein separates Montage-und bereitstellen, die auf dem client...