2009-03-26 7 views
15

Dla IIS6 mogę korzystać z pomocników IIS w Wix zainstalować aplikację internetową tak:Jak zainstalować aplikację ASP.Net MVC w IIS 7 przy użyciu Wix?

<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> 

Niestety, to nie działa dla IIS7. Nie chcemy używać mechanizmu aspnet_isapi.dll, a zamiast tego chcemy zintegrowanego potoku do obsługi routingu żądań. Pula aplikacji utworzona przez ten skrypt jest w trybie klasycznym, a nie w trybie zintegrowanym, więc żadna z procedur obsługi nie działa poprawnie.

Jak poprawnie zainstalować aplikację MVC na serwerze IIS 7?

+0

Niestety, rozszerzenia IIS nie są jeszcze obsługiwane przez usługi IIS7. – alexn

Odpowiedz

2

Rozszerzenia IIS dla WIX nie obsługują IIS7. Zespół IIS ciągle przepisuje metabazę między wersjami. Jest kilka rzeczy, które nie działają, brak zintegrowanej puli aplikacji wśród nich.

Do rozszerzenia się przepisany, jesteś w lewo z trzech opcji:

  • Zastosowanie budować w niestandardowych działań powołać appcmd.exe
  • Używaj XmlConfig zaktualizować ApplicationHost.config
  • napisać własny niestandardowe akcje

W tej chwili wybrałem opcję xmlconfig, ponieważ można to zrobić w komponencie i powiązać go z funkcją.

+0

To nie do końca prawda. Mike wykonał wiele pracy, aby uzyskać IIS7 wspierany przez istniejące CustomActions. Niestety kod obsługuje tylko "starsze" rzeczy. Jak wspomniano powyżej, zintegrowana linia rurowa wymaga niestandardowego kodu. –

+1

OK - Nie wiedziałem, że robiono już prace nad obsługą IIS7 - pojawił się komentarz sugerujący, że wsparcie Apache może nadejść wcześniej: p Miałem wrażenie, że niektóre rzeczy działały, jeśli włączono kompatybilność metabazy IIS6 i to było to . Dobrze słyszeć. – matthewthurlow

+1

Aby było jasne, nadal potrzebujesz zgodności metabazy IIS6, ale przynajmniej powinna działać. To był mój komentarz, kiedy byłem wkurzony na IIS. –

4

Dzięki @matthewthurlow, byłem w stanie wykorzystać utils XML, aby osiągnąć to, co potrzebne do zrobienia:

<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"/> 

Reszta działań wydają się działać dobrze z IIS 7.

+2

Podczas odinstalowywania, jak usunąć wpis? – CheGueVerra

11

Osobiście polecam użycie AppCmd.exe (pierwszy punktor Matthewthurlow), ponieważ nie musisz liczyć się z instalowanymi starszymi komponentami zarządzania lub ryzykować ręczną modyfikacją konfiguracji XML.

Jeśli nie są wygodne z appcmd Mike Volodarsky ma świetny artykuł na Getting Started with AppCmd.exe i Microsoft IIS Configuration Reference jest doskonała, oferując UI, kod i appcmd przykłady modyfikacji każdego z elementów konfiguracji (np Application Pools). IIS7 Administration Pack zawiera również edytor konfiguracji, który pozwala na generate AppCmd scripts z dowolnej istniejącej konfiguracji.

Aby zintegrować AppCmd ​​z WiX, należy utworzyć i zaplanować dwie akcje niestandardowe dla każdego polecenia. W podręczniku WiX v3 documenting this procedure znajdują się ogólne informacje, a poniżej zamieszczam konkretny przykład.

Po pierwsze, trzeba założyć natychmiastowych działań, aby przechowywać wiersz polecenia w nieruchomości:

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

Następny skonfigurować odroczony działań, które odwołuje tę właściwość:

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

I na koniec musisz zaplanować te. Natychmiastowe działanie, które ustawia właściwości, wydaje się działać dobrze po InstallFinalize, a odroczona akcja działa po InstallFiles. Nie udało mi się jeszcze dojść do wycofywania akcji.

MapGuide Open Source robi tę metodę intensywnie; możesz zobaczyć harmonogram CA w naszym pliku MapGuide.wxs oraz definicję CA w naszym pliku IIS7.wxs.

+0

Dzięki za dobre informacje Jason! – si618

+0

To było bardzo przydatne wczoraj i dzięki za linki do przykładów! –