15 Stimmen

Wie installiere ich eine ASP.Net MVC-Anwendung auf IIS 7 mit Wix?

Für IIS6 kann ich die IIS-Helfer in Wix verwenden, um eine Webanwendung wie diese zu installieren:

<iis:WebAppPool 
    Id="AP_MyApp" 
    Name="My Application Pool" 
    Identity="networkService" />
<iis:WebApplication 
    Id="WA_MyApp" 
    Name="MyApp" 
    WebAppPool="AP_MyApp">
    <iis:WebApplicationExtension
        CheckPath="no"
        Executable="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_isapi.dll"
        Verbs="GET,HEAD,POST"/>
</iis:WebApplication>

Leider funktioniert dies nicht für IIS7. Wir wollen den aspnet_isapi.dll-Mechanismus nicht verwenden und wollen stattdessen, dass die integrierte Pipeline das Anfrage-Routing übernimmt. Der von diesem Skript erstellte Anwendungspool befindet sich im klassischen Modus und nicht im integrierten Modus, sodass keiner der Handler korrekt ausgeführt wird.

Wie kann ich eine MVC-Anwendung auf IIS 7 korrekt installieren?

0 Stimmen

Nun, leider wird die IIS-Erweiterung von IIS7 noch nicht unterstützt.

11voto

JasonBirch Punkte 250

Ich persönlich empfehle die Verwendung von AppCmd.exe (Matthewthurlows erster Punkt), da Sie sich nicht darauf verlassen müssen, dass die Legacy-Verwaltungskomponenten installiert sind, oder das Risiko eingehen, die Konfigurations-XML manuell zu ändern.

Wenn Sie mit AppCmd nicht vertraut sind, hat Mike Volodarsky einen großartigen Artikel über Erste Schritte mit AppCmd.exe und die Microsoft IIS-Konfigurationsreferenz ist hervorragend und bietet UI-, Code- und AppCmd-Beispiele für die Änderung der einzelnen Konfigurationselemente (z. B. Anwendungspools ). Die Website IIS7-Verwaltungspaket enthält auch einen Konfigurationseditor, mit dem Sie AppCmd-Skripte generieren aus einer bestehenden Konfiguration.

Um AppCmd in WiX zu integrieren, müssen Sie für jeden Befehl zwei benutzerdefinierte Aktionen erstellen und planen. Allgemeine Informationen finden Sie im WiX v3 Handbuch dieses Verfahren zu dokumentieren und ich habe unten ein konkretes Beispiel beigefügt.

Zunächst müssen Sie eine Sofortaktion einrichten, um die Befehlszeile in einer Eigenschaft zu speichern:

<CustomAction 
  Id="CreateAppPool_Cmd" 
  Property="CreateAppPool" 
  Execute="immediate" 
  Value="&quot;[WindowsFolder]system32\inetsrv\APPCMD.EXE&quot; add apppool /name:&quot;[APP_POOL_NAME]&quot;" /> 

Als nächstes richten Sie eine aufgeschobene Aktion ein, die sich auf diese Eigenschaft bezieht:

<CustomAction 
  Id="CreateAppPool" 
  BinaryKey="WixCA" 
  DllEntry="CAQuietExec" 
  Execute="deferred" 
  Return="ignore" 
  Impersonate="no"/> 

Und schließlich müssen Sie diese Termine festlegen. Die sofortige Aktion, die die Eigenschaften festlegt, scheint gut nach InstallFinalize zu funktionieren, und die aufgeschobene Aktion funktioniert nach InstallFiles. Ich bin noch nicht so weit gekommen, Rollback-Aktionen zu entwickeln.

MapGuide Open Source nutzt diese Methode ausgiebig; Sie können die CA-Planung in unserem MapGuide.wxs Datei und die CA-Definition in unserer IIS7.wxs archivo.

0 Stimmen

Das war für mich gestern sehr nützlich, und danke auch für die Links zu den Beispielen!

4voto

Simon Steele Punkte 11468

Dank @matthewthurlow konnte ich die XML-Utilities verwenden, um das zu erreichen, was ich tun musste:

<util:XmlFile 
    Id="ModifyAppPoolPipelineType"
    Action="setValue"
    ElementPath="//configuration/system.applicationHost/applicationPools/add[\[]@name='My Application Pool'[\]]/@managedPipelineMode"
    File="[WindowsFolder]System32\inetsrv\config\applicationHost.config"
    Value="Integrated"/>

Der Rest der Aktionen scheint mit IIS 7 problemlos zu funktionieren.

2voto

matthewthurlow Punkte 42

Die IIS-Erweiterungen für WIX unterstützen IIS7 nicht. Das IIS-Team schreibt die Metabasis zwischen den Versionen immer wieder neu. Es gibt eine ganze Reihe von Dingen, die nicht funktionieren, darunter das Fehlen eines integrierten App-Pools.

Bis die Durchwahlen umgeschrieben werden, bleiben Ihnen drei Möglichkeiten:

  • Verwenden Sie eingebaute benutzerdefinierte Aktionen zum Aufrufen von appcmd.exe
  • XmlConfig verwenden, um applicationHost.config zu aktualisieren
  • Schreiben Sie Ihre eigenen benutzerdefinierten Aktionen

Ich habe mich im Moment für die xmlconfig-Option entschieden, da man dies innerhalb einer Komponente tun und sie mit einem Feature verbinden kann.

0 Stimmen

Das ist nicht ganz richtig. Mike hat eine Menge Arbeit geleistet, um IIS7 durch die bestehenden CustomActions zu unterstützen. Leider unterstützt der Code nur die "Legacy"-Sachen. Wie bereits erwähnt, benötigt die integrierte Pipe-Line eigenen Code.

1 Stimmen

OK - ich wusste nicht, dass an der Unterstützung von IIS7 gearbeitet wird - ich habe einen Kommentar gesehen, der darauf hindeutet, dass die Apache-Unterstützung früher kommen könnte :p Ich hatte den Eindruck, dass einige Dinge funktionieren, wenn man die IIS6-Metabasis-Kompatibilität einschaltet und das war's. Gut zu hören.

1 Stimmen

Um das klarzustellen, benötigen Sie immer noch die Kompatibilität der IIS6-Metabasis, aber zumindest sollte es funktionieren. Und das war mein Kommentar aus dem Stegreif, als ich auf den IIS sauer war.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X