Gestern war wieder einer dieser Tage, an denen kurz vor Feierabend etwas aufschlägt, dass dann ums Verrecken nicht funktionieren will. Im Falle des gestrigen Tages war es ein auf dem ASP.NET MVC Framework basierendes Web.
Unser Kunde wollte sich das Web anschauen, allerdings war dieses bisher nicht auf einem Server installiert, sondern nur auf der Kiste des betroffenen Entwicklers (allerdings war der Quellcode natürlich in SVN, also keine Panik
).
Kurz zum Vergleich die Setups:
Setup des Entwicklers:
SQL Server 2005 Express
Ins VS integrierter Webserver
Setup des Stage Servers:
MS SQL Server 2000
IIS 6
Das Ganze ging zu wie beim Hürdenlauf:
1. Hürde: SQL Datenbank Version
Problem: Datenbank war nur lokal und im SQL Server 2005 Format vorhanden.
Lösung: Die Datenbank auf dem Stage Server angelegt und per SQL Server Management Studio alles vom lokalen Server auf den Stage-Server rüber kopiert (hat übrigens erschreckend reibungslos funktioniert).
2. Hürde: Datenbank-Verbindung
Problem: In der web.config ist natürlich nur der Verbindungsstring für die lokale DB des Entwicklers vorhanden.
Lösung: Den entsprechenden String anpassen und gleich (um zukünftige Deployments zu erleichtern) das entsprechende Tag in der web.config per configSource Attribut in eine eigene Datei auslagern. Hier muss ggf. nach dem Veröffentlichen drauf geachtet werden, dass auch die korrekte Datei im gleichen Verzeichnis liegt wie die web.config, sonst fliegt eine Exception.
3. Hürde: 404 beim Aufrufen der Default.aspx nach dem Veröffentlichen des Webs
Problem: MVC Framework nicht auf dem Server installiert
Lösung: Lokale Kopie des Frameworks beim Veröffentlichen mitgeliefert (bei den References im entsprechenden Projekt die Eigenschaft “Copy Local” von System.Web.Mvc und ggf.MvcSiteMap.Core auf true setzen) (Quelle).
4. Hürde: Aufruf der Default.aspx funktioniert, aber es erscheint ein 404 nach der Umleitung auf die default Route (z.b. Home/Start)
Problem: Für die Routen wird die aspnet_isapi.dl nicht aufgerufen, da keine .aspx Erweiterung in der URL vorhanden ist.
Lösung: Mögliche Lösungen findet ihr in diesem Beitrag in Steve Sanderson's Blog. Wir haben uns in unserem Fall für Methode 1 entschieden, da es nur zu Demonstrationszwecken eingerichtet wurde.
5. Hürde: SqlException beim Ausführen eines Queries über das EF
Problem: .NET generiert beim Erstellen DB-spezifischen Code. Entwickelt wurde das Web auf SQL Server 2005 (wenn auch nur Express), veröffentlich wurde es auf einen Server mit SQL Server 2000 installiert, daher die SqlException.
Lösung: Öffnet eure .edmx Datei in einem XML Editor (über Rechsklick –> “Open with …” im Solution Explorer gehts auch im Visual Studio), sucht nach dem <Schema> Tag. Dieses sollte ein Attribut ProviderManifestToken haben, welches im Falle des Providers System.Data.SqlClient die Version des MS Sql Servers angibt. Diesen Wert ändert ihr auf 2000, veröffentlicht das Web erneut und es sollte funktionieren (Quelle).
Und damit haben wir (nach knapp 3 Stunden Verspätung) das Ziel erreicht … und ziemlich viel gelernt ![]()



