Autor: Dflying Chen ( http://dflying.cnblogs.com/ )
Im vorherigen Artikel dieser Reihe (Aufrufen von Webdiensten in ASP.NET Atlas – Einführung und einfache Anwendung) waren wir mit der grundlegendsten Methode zum Aufrufen von Webdiensten in Atlas vertraut, aber in der tatsächlichen Entwicklung stellen wir einfach eine Anfrage und warten Die Rückgabe von Ergebnissen reicht nicht aus. Die meisten von uns müssen den Umgang mit Fehler-Timeouts usw. in Betracht ziehen und Benutzern auch erlauben, Vorgänge abzubrechen. Glücklicherweise berücksichtigt die Kapselung der Web-Methode im Web-Service durch Atlas auch diese Anforderungen vollständig.
Lassen Sie uns zur Veranschaulichung ein Beispiel für eine Webmethode geben, zum Beispiel für die folgende Webmethode:
public class ComplexWebService : System.Web.Services.WebService {
[WebMethod]
öffentliche Zeichenfolge BadMethod(int delayTime, bool throwException)
{
// etwas etwas
}
}
Das von Atlas generierte JavaScript-Mashup hat die folgende Signatur: ComplexWebService.BadMethod(
Verzögerungszeit,
throwException,
onMethodComplete,
onMethodTimeout,
onMethodError,
onMethodAborted,
userContext,
timeoutIntervall,
Priorität,
useGetMethod,
);
Beachten Sie, dass die beiden Parameter in der Webmethode der Reihe nach als die ersten beiden Parameter der JavaScript-Methode verwendet werden und es einige zusätzliche Parameter gibt:
onMethodComplete: Gibt den Namen der Rückruffunktion an, die ausgelöst wird, wenn die Methode erfolgreich abgeschlossen und zurückgegeben wird. Im Allgemeinen sollten Sie diese Methode immer angeben.
onMethodTimeout: Gibt den Funktionsnamen an, der ausgelöst wird, wenn bei der Methodenausführung das Zeitlimit überschritten wird.
onMethodError: Gibt den Funktionsnamen an, der ausgelöst wird, wenn die Methode während der Ausführung auf eine Ausnahme stößt.
onMethodAborted: Geben Sie den Namen der Funktion an, die ausgelöst wird, wenn die Methode während der Ausführung vom Benutzer abgebrochen wird.
userContext: Benutzerkontextobjekt, auf das in den oben genannten vier Funktionen zugegriffen werden kann.
timeoutInterval: Legen Sie das Zeitlimit für das Timeout in Millisekunden fest. Der Standardwert scheint 90000 zu sein. Normalerweise sind keine Änderungen erforderlich.
Priorität: Legen Sie die Ausführungspriorität dieser Methode fest. Diese Priorität wird in Batch-AJAX-Operationen verwendet (im nächsten Artikel erwähnt).
useGetMethod: Ob HTTP GET zum Senden von Anforderungen verwendet werden soll, der Standardwert ist false.
Die Reihenfolge der oben genannten acht Attribute muss wie angegeben sein. Manchmal müssen wir jedoch erst später in der Bestellung einen Parameter angeben und gleichzeitig die vorherigen Parameter schreiben. Aus diesem Grund stellt uns Atlas speziell eine weitere Aufrufmethode zur Verfügung und übergibt die oben genannten acht Parameter in Form eines Wörterbuchs an die Methode. Wenn wir beispielsweise nur die Parameter onMethodComplete und timeoutInterval benötigen, können wir so schreiben:
ComplexWebService.BadMethod(
Verzögerungszeit,
throwException,
{
onMethodComplete: CompleteHandler,
Zeitüberschreitungsintervall: 10000
}
);
OK, schauen wir uns die allgemeine Verarbeitung in den oben genannten vier Rückruffunktionen (onMethodComplete, onMethodTimeout, onMethodError und onMethodAborted) unter normalen Umständen anhand eines Beispiels an.
Lassen Sie uns zunächst die Web-Service-Methode am Anfang vervollständigen:
using System;
mit System.Web;
Verwenden von System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = " http://tempuri.org/ ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
öffentliche Klasse ComplexWebService : System.Web.Services.WebService {
[WebMethod]
öffentliche Zeichenfolge BadMethod(int delayTime, bool throwException)
{
if(throwException)
{
throw new Exception("Tut mir leid, das mache ich nicht gern!");
}
System.Threading.Thread.Sleep(delayTime);
return „Fertig!“;
}
}
Sie können sehen, dass diese Methode zwei Parameter hat: „delayTime“ gibt die Verzögerung der Methode an und „throwException“ gibt an, ob die Methode eine Ausnahme auslöst. Durch die Steuerung dieser beiden Parameter und des Parameters timeoutInterval beim Aufruf können wir Abschluss-, Timeout- und Ausnahmesituationen simulieren.
Fügen Sie dann ScriptManager zur Seite hinzu und fügen Sie einen Verweis auf diesen Webdienst hinzu:
<atlas:ScriptManager ID="ScriptManager1" runat="server">
<Dienste>
<atlas:ServiceReference Path="ComplexWebService.asmx" />
</Dienste>
</atlas:ScriptManager>
Fügen Sie der ASPX-Seite vier Schaltflächen hinzu, um die folgenden vier Situationen auszulösen: <div>
Dies ist eine SCHLECHTE Methode, sie kann:<br />
<input id="btnWorkFine" type="button" value="work fine" onclick="return btnWorkFine_onclick()" />
<input id="btnTimeOut" type="button" value="timeout" onclick="return btnTimeOut_onclick()" />
<input id="btnThrowException" type="button" value="eine Ausnahme auslösen" onclick="return btnThrowException_onclick()" />
<input id="btnCanceld" type="button" value="get cancelled" onclick="return btnCanceld_onclick()" />
</div>
Normal abgeschlossen, wir haben auf der Serverseite keine Verzögerung oder Ausnahme angegeben und eine angemessene Zeitüberschreitung (10 Sekunden) angegeben:
function btnWorkFine_onclick() {
ComplexWebService.BadMethod(
0,
FALSCH,
onBadMethodComplete,
onBadMethodTimeout,
onBadMethodError,
onBadMethodAborted,
„btnWorkFine_onclick“,
10000
);
}
Funktion onBadMethodComplete(result)
{
Warnung(Ergebnis);
}
Timeout, geben Sie die serverseitige Verzögerung von 3 Sekunden an, aber das Timeout ist nur auf 1 Sekunde eingestellt:
function btnTimeOut_onclick() {
ComplexWebService.BadMethod(
3000,
FALSCH,
onBadMethodComplete,
onBadMethodTimeout,
onBadMethodError,
onBadMethodAborted,
„btnTimeOut_onclick“,
1000
);
}
Funktion onBadMethodTimeout(request, userContext)
{
var timeoutString = "Der Aufruf von '" + userContext + "' ist aufgrund einer Zeitüberschreitung fehlgeschlagen!";
alarm(timeoutString);
}
Ausnahme: Geben Sie die vom Server ausgelöste Ausnahme an. Beachten Sie, dass Sie den Antwortparameter in der Rückruffunktion verwenden können, um detaillierte Fehlerinformationen abzurufen:
function btnThrowException_onclick() {
ComplexWebService.BadMethod(
0,
WAHR,
onBadMethodComplete,
onBadMethodTimeout,
onBadMethodError,
onBadMethodAborted,
„btnThrowException_onclick“,
10000
);
}
Funktion onBadMethodError(Ergebnis, Antwort, UserContext)
{
var errorString = "Test '" + userContext + "' fehlgeschlagen!";
if (result == null) {
errorString += " Status code='" + Response.get_statusCode() + "'";
}
anders {
errorString +=
" Message='" + result.get_message() +
"'rnstackTrace = " + result.get_stackTrace();
}
alarm(errorString);
}
Abbruch durch den Benutzer, ähnlich dem normalen Abschluss, aber mit request.abort(), um den Vorgang unmittelbar nach der Anforderung abzubrechen:
function btnCanceld_onclick() {
var request = ComplexWebService.BadMethod(
2000,
FALSCH,
onBadMethodComplete,
onBadMethodTimeout,
onBadMethodError,
onBadMethodAborted,
„btnCanceld_onclick“,
10000
);
request.abort();
}
Funktion onBadMethodAborted(request, userContext) {
var errorString = "Der Aufruf von '" + userContext + "' ist fehlgeschlagen, die Anfrage wurde abgebrochen!";
alarm(errorString);
}
Das Beispielprogramm kann hier heruntergeladen werden: