Der Aufruf von PageMethods in Javascript ist ja relativ trivial:
1: <script type="text/javascript" language="javascript">
2: function updateDB() {
3: PageMethods.WriteReviewToDB(OnSucceeded, OnFailed);
4: }
5:
6: function OnSucceeded() {
7: showstep('finishStep');
8: }
9:
10: function OnFailed(error) {
11: alert(error.get_message());
12: }
13: </script>
Hierfür muss die Methode im Codebehind nur als shared (VB) bzw. static(C#) definiert werden und das Attribut Webmethod hinzugefügt werden. Wird bei dem Aufruf der Zugriff auf die Session benötigt, muss zusätzlich noch die EnableSession-Eigenschaft des WebMethod-Attributs aktiviert werden.
1: <WebMethod(EnableSession:=True)> _
2: Public Shared Sub WriteReviewToDB()
3: 'Do Something
4: End Sub
Obwohl nun alles korrrekt eingestellt war, bekam ich aber die Fehlermeldung "Authentication failed". Nach einer Stunde Fehler suchen und Debuggen mit Firebug wurde dann die Ursache gefunden: ich setze UrlRewriting ein.
Die Lösung für dieses Problem ist schnell gefunden: PageMethods.set_path().
1: <script type="text/javascript" language="javascript">
2: function updateDB() {
3: PageMethods.set_path('/default.aspx');
4: PageMethods.WriteReviewToDB(OnSucceeded, OnFailed);
5: }
6:
7: function OnSucceeded() {
8: showstep('finishStep');
9: }
10:
11: function OnFailed(error) {
12: alert(error.get_message());
13: }
14: </script>