Hallo Chris,
> Ich galube Du bist Dir über die Funkktionsweise nicht ganz im klaren:
da hast Du recht, ich bin mir nicht ganz im klaren, was Microsoft hinter den Kullissen getan hat, wenn der Event Page_SaveStateComplete ausgelöst wird. Klar ist mir, daß ohne Roundtrip zum Server nichts geht. Bei all meinen Versuchen scheitere ich aber noch immer leider. Vielleicht wird es so klarer:
Ich will, daß die Seite nachdem sie gerendert wurde Daten an den Server sendet. Sie soll das tun, ohne daß die Seite komplett neu geladen werden muß (was ja seit Ajax gehen sollte). Ich will weiter, daß dieses automatisch geschieht (kein Button-Click event notwendig). Also Forderung1: eine JavaScript Funktion soll automatisch aufgerufen werden nachdem die Seite im Browser gerendert wurde.
Ich will weiter, daß auf dem Server bei Eintreffen der Daten, diese zunächst an den Business Layer geschickt werden, der z.B. Seitenaufrufe von Crawlern anders behandelt als die von normalen Usern. Dort werden die Daten also aufbereitet und ggf. ergänzt an den DB Layer übergeben, der dann einen DB-record erzeugt.
Diesen Punkt wollte ich zunächst per PageMethod lösen, was ich aber wieder verworfen habe, da das auf meinem Rechner nicht geht. Hierzu habe ich einen separaten Thread eröffnet, ich denke, das geht vielleicht mehr in die Richtung Konfiguration der Ajax.Net Umgebung als in die einer Programmiertechnischen Lösung.
Die Alternative wurde auch schon angesprochen, einen Webservice zu bemühen. Hier habe ich die folgenden Detailprobleme: Der Webservice hat keinen Zugriff auf HTTPRequest, wo ich bislang z.B. die Browserversion etc. abfrage. Vielleicht mache ich hier auch was falsch, das Einbinden der Namespaces reicht jedenfalls nicht. Ich vermute aber, daß bei dem Datentransfer zwischen Browser und Webservice nicht dieselben umfangreichen HTTP-Header mitgesendet werden.
Nun kann ich ja mal nachforschen, ob ich nicht dieselben Informationen auch per JavaScript bekommen kann. Über das Navigator Objekt bekomme ich schon eine Menge. Im nächsten Schritt hätte ich aber das Problem, komplexe Daten an den Webservice zu übermitteln (ein JavaScript Objekt mit vielleicht 15 Objektfeldern). Dabei komme ich aber auch nicht so recht weiter, weise ich auf Seiten des Webservice einen äquivalenten unter c# deklarierten Datentyp zu, dann wird der dortige Konstruktor aufgerufen und die Felder sind leer:
[WebMethod(EnableSession = true)]
public void GetVisitor(SiteBL.VisitorObject o)
{
Dummyfunktion(); //bis jetzt nur, damit ich mit dem Debugger anhalten kann;
}
Schreibe ich statt SiteBL.VisitorObject nur object, dann ist das object komplett leer, hat bzw. kennt also noch nicht einmal die Felder, die mein abgesendetes Javascript Objekt hatte.
Ich denke, daß ich hier wohl am ehesten auf einem Holzweg bin. Achja, aufrufen tu ich den Webservice wie vorgeschlagen über eine Funktion hinter Body onload...
So, das zu dem was ich inzwischen probiert habe. Vermutlich sind noch mehrere Denkfehler vorhanden, ich danke jetzt schon für die Hinweise und Aufklärung.
Grüße,
Paul