ASP.NET 4.5 auf IIS 7.5 mit SQL Server Express 2012 einrichten

Hier mein Vorgehen nach langem und frustrierendem Herumprobieren:

IIS vorbereiten

  1. Verzeichnis für App anlegen und App hineinkopieren
  2. App im IIS-Manager zum Beispiel als neue Site hinzufügen (mit eigenem AppPool)
  3. Anonyme Authentifizierung auf „AppPool-Identity“ festlegen
  4. AppPool-Grundeinstellungen auf .NET 4.0 (integriert) festlegen
  5. Erweiterte AppPool-Einstellungen auf „Benutzerprofil laden = True“ und „Identität = AppPool-Identity“ festlegen
  6. In der Kommandozeile folgende Befehle ausführen:
    icacls <app-path> /grant "IIS APPPOOL\<apppool-name>":(OI)(CI)(RX)
    icacls <app-path>\App_Data /grant "IIS APPPOOL\<apppool-name>":(OI)(CI)(F)

SQL Server vorbereiten

  1. Mit den folgenden Befehlen den SQL Server Express aktualisieren:
    CREATE LOGIN [IIS APPPOOL\<apppool-name>] FROM WINDOWS
    GRANT CREATE DATABASE TO [IIS APPPOOL\<apppool-name>]

Der passende Connection String

Beim Connection String kann es dann wieder etwas hakelig werden, aber der folgende Eintrag funktioniert ganz gut:
Data Source=.\SQLEXPRESS; Initial Catalog=<db-name>; Integrated Security=SSPI; AttachDBFilename=|DataDirectory|<db-name>.mdf; User Instance=true

IIS 7 + SQL Server Express 2008

Leider, leider scheint das bei dieser Kombo nicht so „einfach“ zu sein, denn mit „User Instance=true“ kommt es zu Impersonation-Fehlern und ohne fehlen die Rechte im App_Data-Verzeichnis…

Letzteres lässt sich aber korrigieren, indem man dem User „<host-name>\SQLServerMSSQLUser$<host-name>$SQLEXPRESS“ Vollzugriff auf App_Data gewährt – dann kann „User Instance“ komplett weggelassen werden.

WebMatrix, Razor und IIS7-Deployment

WebMatrix ist ein großartiges Tool, um Webseiten schnell zu erstellen und zu bearbeiten – egal ob in PHP, ASP, Razor, etc. Durch die vielen Templates fällt der Einstieg besonders leicht. Und der eingebaute IIS Express ermöglicht sofortiges Testen. Leider kam es beim Deployment meines ersten WebMatrix-Razor-Projektes zu einem Problem: die erweiterungslosen URLs („/Default“ statt „/Default.cshtml“), die noch im IIS Express funktionierten, führten im IIS7 zu 403- und 404-Fehlern. Nach ein wenig Suchen im Netz konnte ich aber eine einfache Lösung finden; einfach die Web.config um den folgenden Eintrag erweitern:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

Weitere Problemlösungen finden sich unter http://www.iis.net/learn/develop/using-webmatrix/webmatrix-beta-2-release-readme