ASP.NET Session zwischen Subdomains

Für die Umsetzung einer ,mehrsprachigen Seite, möchten wir für jede Sprache eine eigene Subdomain verwenden.

Also:

  • www.domain.org (default Sprache)
  • en.domain.org
  • es.domain.org
  • und noch 30 weitere :-)

Beim Wechsel der Sprache erfolgt eine Redirect auf die entsprechende Subdomain.

clip_image002

Beim Rederict auf eine andere Domain, geht in ASP.NET die aktuelle Session verloren.

Grund, die aktuelle SessionId wird von ASP.NET, sofern nicht "Cookieless", in einem Cookie gespeichert. Per default wird als Cookie Domain, die aktuelle Domain, inklusive der Subdomains definiert.

Also für www.domain.org, ist auch die Domain des Cookies: "domain=www.domain.org"

Navigiert man also von einer Subdomain zu einer anderen, wird nun ein neues Session-Cookie mit einer neuen SessionId gesetzt.

Möchte man dieses verhindern hilft folgender Code:

clip_image004

Der Event lässt sich so registrieren:

clip_image006

Hier wird die Domain des gesetzten Cookies im Unload Event der Masterpage angepasst. Wichtig ist, das der "Domain" Teil des Cookies auf allen Seiten der Anwendungen korrigiert wird.


Spaß mit Google Maps

campsitesLevel5 

Entwicklungsscreenshot, Benutzermehrwert wird geprüft :-)


PowerCommands for VS 2008

Viele schöne Ergänzungen für Visual Studio 2008, Beispiel:

image

image 


Windows Live Writer auf Win 2008

Einfach Beta 3 Verwenden :-)


64Bit - neue Generation von Fehlerquellen

Zuerst die gute Nachricht:

image

Nachdem das Entwickeln auf dem alten Rechner etwas langsam geworden ist, durfte ein neues System her.

Das mit einem 64Bit Windows 2008 und alles ist schnell.

Alles in allem eine Konfiguration die ich zum Entwickeln absolut empfehlen kann. Insbesondere Resharper in Verbindung mit WPF macht wieder Spaß. Auch ist die Hürde mal eben den Development Stack zu Debuggen deutlich gesunken.

Nun die schlechte Nachricht:

Der Umstieg auf 64Bit schaft eine neue Welt von Problemen.

Um mit den Worten von Walter zu sprechen: "You are entering a world of pain":

image

Für ein Projekt setzen wir NHibenate mit SQLite ein.

NHibernate lädt den ADO-Treiber über "Type.GetType(string)"

image

Das ganze funktioniert für die Tests wunderbar. Auch im WPF Design Mode wird die Datenbank korrekt geladen. Nur beim Starten den Anwendung lautet die Fehlermeldung von "Type.GetType(string)"

System.BadImageFormatException

Die eigentliche Fehlermeldung kommt jedoch nicht hoch und wird von NHibernate 2 Mal "gecatcht":

image

Besonders verwirrend wie gesagt, die Tests und selbst im WPF-Design Mode wird die Datenbank korrekt angesprochen.

Nach langem Debuggen, Haare raufen (habe jetzt fast ne Glatze) und googlen kam die zündende Idee den SQLite Driver selbst zu bauen und auf die korrekten CPU Einstellungen zu achten:

image

Und siehe da, Problem gelöst.

Ein etwas fader Beigeschmack bleibt. Die Tools und Fehlermeldungen um das Problem zu identifizieren sind obskur. Wie läßt sich sehen ob eine Anwendung in 32Bit oder 64Bit ausgeführt wird.

Vermutungen: Der Unittestrunner von Resharper und NUnit arbeiten mit 32Bit. Genauso der WPF Designer.

Hier erstmal Stopp: Es bleiben viele Fragen zum Umstieg von der 32Bit auf die 64Bit Welt und die Wage Hoffnung, das solche Probleme die Ausnahme bleiben.