Skip to content

Betrieb mit IIS unter Windows

Beim CMI STS handelt es sich um eine ASP.NET Core Anwendung, so das die Artikel-Reihe um Host ASP.NET Core on Windows with IIS herangezogen werden kann. Der Artikel Troubleshoot ASP.NET Core on Azure App Service and IIS hilft bei der Fehlersuche.

Diese Dokumentation geht von einem framework-dependent deployment aus.

Installation des Hosting Bundles

Das Hosting Bundle .NET Core 8.0 muss nach dem IIS installiert werden:

"If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. Run the Hosting Bundle installer again after installing IIS."

  1. Installieren des IIS über die Windows Rollen
  2. Installieren des ASP.NET Core Runtime 8.0.X Hosting Bundles
  3. Neustart des IIS: cmd net stop was /y net start w3svc

IIS Site einrichten

Physical path: Die CMI STS Dateien werden in einem Verzeichnis auf dem Webserver abgelegt. Es bietet sich beispielsweise C:\inetpub\CMI_STS an.

Die Datei web.config muss sich direkt im Verzeichnis befinden. Die Standardeinstellungen sind ausreichend um den CMI STS zu starten. Zu Fehleranalyse und zur umgebungsspezifischen Konfiguration, kann die Datei angepasst werden. Der Artikel web.config file beschreibt viele nützliche Einstellungsmöglichkeiten.

Application Pool: Einen Application Pool für den CMI STS anlegen.

  1. Den Application Pool mit der .NET CLR Einstellung "No Managed Code" konfigurieren.
  2. Die erweiterten Einstellungen des Application Pools öffnen und unter "Process model" die Option "Load User Profile" auf true stellen.
  3. Im Konfigurations-Editor auf Server-Ebene in der Sektion "Sektion system.applicationHost/applicationPools" die Eigenschaft "applicationPoolDefaults.processModel.setProfileEnvironment" auf true stellen.

Add application pool

Standardmässig wird die ApplicationPoolIdentity verwendet, mit dem Hosting-Prozess ausgeführt wird. Diese Identity (beziehungsweise die Identity, die den Pool betreibt), benötigt Leserechte auf den Physical path und Schreibrechte auf das zukünftige Logverzeichnis. Wenn das Signing-Zertifikat nicht manuell angelegt wurde, versucht der CMI STS selbst ein solches zu erzeugen. Für diesen Fall muss der CMI STS auf den Pfad ./cert.pfx Schreibzugriff erhalten oder ein anderer Pfad für dieses Zertifikat muss konfiguriert werden.

Tipp: Der Application Pool kann mit dem Benutzernamen IIS AppPool\\ auf Verzeichnisse berechtigt werden.

Grant the application pool user

Site: Mit dem Physical Path, einem Https-Zertifikat und dem Application Pool kann die Site eingerichtet.

Grant the application pool user

Wird die Webseite des CMI STS nun geöffnet (in diesem Beispiel https://cmists.gemeinde.ch), sollte die Meldung "Tenant could not be read from the request path." erscheinen. Das Setup des IIS für den CMI STS ist abgeschlossen. Der CMI STS kann nun konfiguriert werden.

Konfiguration

Für den Betrieb mittels IIS bietet sich die Konfiguration über die Datei appsettings.json an. Umgebungsvariablen werden ebenfalls ausgewertet. Umgebungsvariablen können in der Datei web.config auch nur für diesen einen Hosting-Prozess festgelegt werden:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      [...]
      <aspNetCore processPath="dotnet" arguments=".\CMI.STS3.dll" [...]>
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
          <environmentVariable name="ASPNETCORE_URLS" value="http://[...]" />
          <environmentVariable name="LOCAL" value="true" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

HTTPS Umleitung

Wenn das IIS URL Rewrite Modul installiert ist, kann in der Datei web.config eine HTTPS-Umleitung aktiviert werden.

Wird der Rewrite aktiviert bevor das IIS Modul installiert ist, kann der CMI STS nicht geladen werden und IIS zeigt einen Konfigurationsfehler für die Datei web.config an.

<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <!-- enable rewrite after iis rewite module is installed
      <rewrite>
        <rules>
          <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
            <match url="*" negate="false" />
            <conditions logicalGrouping="MatchAny">
              <add input="{HTTPS}" pattern="off" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Found" />
          </rule>
        </rules>
      </rewrite>
      -->
    </system.webServer>
  </location>
</configuration>