Ich habe einen klassischen asp.net Webservice (asmx) und eine Webmethode darin. Ich muss eine benutzerdefinierte Ausnahme für einen bestimmten Fall in meiner Webmethode auslösen, und ich muss diese spezifische benutzerdefinierte Ausnahme abfangen, wo ich die Web-Service-Methode aufrufen.
%Vor%Eingabe-, Ausgabe- und Ausnahmeklassen als Beispiel:
%Vor%Auf der Client-Seite brauche ich:
%Vor%Das kann ich jedoch nicht tun, weil ich beim Hinzufügen der Webdienst-Referenz auf dem Client Dienstklassen, Eingabe- und Ausgabeklassen habe, aber keine benutzerdefinierte Ausnahmeklasse.
Auch ein weiteres Problem ist, dass ich auch Probleme mit der Serialisierung der Exception-Klasse habe (wegen der Exception.Data-Eigenschaft implementiert die IDictionary-Schnittstelle)
Gibt es eine Möglichkeit, dies auf meine Art zu tun, oder bin ich völlig falsch oder fehlt etwas an den Grundlagen von Webdiensten?
Danke.
Der ASP.NET-Webdienst kann alle Arten von Ausnahmen auslösen: SoapException, HelloWorldException oder so. Die Ausnahme wird jedoch in ein SOAP-Fault-Element serialisiert. Unabhängig vom Typ der Ausnahme, die im Service ausgelöst wird, wird die Ausnahme während der Deserialisierung in eine SoapException konvertiert. Daher ist es nicht möglich, die HelloWorldException mit meinem catch-Block in meiner Frage abzufangen, selbst wenn ich die HelloWorldException für den Client bereitstelle.
Für einen ASP.NET-Client besteht die einzige Möglichkeit darin, die Ausnahme als SoapException abzufangen und sie mit der Eigenschaft Actor
oder SoapFaultSubCode
zu behandeln.
Ich habe mein Problem im Grunde wie folgt gelöst:
Web Service:
%Vor%Kunde:
%Vor%Zusammen mit dem Dokument, das Bryce Fischer in seiner Antwort schrieb; Diese msdn-Dokumente enthalten auch hilfreiche Informationen zum Übergeben und Behandeln von Web-Service-Ausnahmen.
Vorgehensweise: Auslösen von Ausnahmen von einem mit ASP.NET erstellten Webdienst
>Vorgehensweise: Behandeln von Ausnahmen, die von einer Web-Service-Methode ausgelöst werden
Das kann hilfreich sein. Sieht so aus, als ob Sie eine SoapException erhalten, aber Sie können die Details überprüfen, um festzustellen, ob es Ihre Klasse ist oder nicht.
Randnotiz, um Zugriff auf "HelloWorldException" zu haben, können Sie es in eine separate Assembly ziehen und auf dem Client bereitstellen ...
Tags und Links c# asp.net exception web-services