Bereitstellung auf Azure App Service
Ein Power Portals Pro Portal ist eine Single ASP.NET Core-Anwendung, egal welchen Stack Sie wählen, daher ist die Bereitstellung auf einen gewöhnlichen App-Service eine normale dotnet publish Option. Diese Seite behandelt die zu erstellenden Ressourcen, die vom Portal geliehenen Einstellungen, die wir als Standardeinstellungen vorschlagen und die wenigen Schritte, die speziell für Power Portals Pro und nicht für ASP.NET Core gelten.
Was Sie einsetzen
Beide Vorlagen erzeugen eine Webanwendung und eine Veröffentlichungsausgabe. Es gibt keinen separaten Frontend-Host, keine statische Site-Ressource und keinen zweiten App Service:
- Blazor – das Serverprojekt hostet die App. Unter oder unter
ServerderAutoInteraktivität bedient es auch die Blazor SignalR-Schaltung; darunterWebAssemblybedient es das Client-Bündel und die Endpunkte, die/api/*der Client aufruft. - React –
dotnet publishführt den Vite-Build für das Client-Projekt aus und steuert ihndist/in den Hostwwwrootein, sodass einer ASP.NET Core-Host die SPA und die API von einem einzigen Ursprung aus bereitstellt. Nichts Zusätzliches zu verdrahten.
Anmerkung
Da der React Publish an npm ausliefert, muss Node auf dem laufenden Rechner installiert werden – auf deinem Laptop
dotnet publishoder dem Build-Agenten. Der Client der Vorlage fragt nach Node^20.19.0 || >=22.12.0. App Service selbst benötigt Node nie; er sieht immer nur die erstellte Ausgabe.
Vorgeschlagene Standardeinstellungen
Ausgangspunkte, keine Regeln – aber das sind das, was wir für ein neues Produktionsportal wählen würden.
- Betriebssystem: Linux. Günstiger pro Stufe, schneller zu starten, und es hält IIS
web.configkomplett aus dem Spiel. Windows funktioniert gut, wenn deine Organisation darauf standardisiert. - Laufzeit-Stack: .NET 10. Das Template-Ziel
net10.0. Veröffentlichen Sie framework-abhängig und lassen Sie App Service die Laufzeit liefern. - Plan: B1 – für jede Umgebung, inklusive Produktion. B1 ist die günstigste Stufe, die warm bleiben kann, und später hochskalieren ist ein Befehl ohne Redeployment und ohne nennenswerte Ausfallzeiten. Die Bereitstellung von etwas Größerem "weil es Produktion ist" startet eine Rechnung, die niemand erneut aufnimmt; starte hier und steige auf, wenn eine Messung oder ein Bedarf an Deployment-Slots es vorsieht. Was du bis dahin aufgibst: keine Deployment-Slots und keine Autoskalierung (beide starten bei Standard – und vergleichen Sie S1 mit P0v3, das unter Linux meist günstiger ist und mehr Speicher hat).
- Always On: An. App Service entlädt eine leere App, und ein Cold Start bedeutet, sich wieder mit Dataverse zu verbinden und die Metadaten- und Lokalisierungscaches neu aufzubauen. Der erste Besucher nach einer ruhigen Phase zahlt für alles.
- Nur HTTPS: Eingeschaltet, mindestens TLS 1.2, HTTP/2 aktiviert. Das Portal gibt Authentifizierungscookies aus; es gibt keinen Grund, reines HTTP zu akzeptieren.
- Web-Sockets: Für Blazor Server oder Auto eingeschaltet. Standardmäßig ist der App Service aus, und ohne ihn fällt die Leitung leise auf Long Poling zurück.
- Session-Affinität: Für Blazor Server oder Auto aktiviert – eine Schaltung gehört zu einer Instanz. Schalte sie für React- und Blazor WebAssembly-Portale aus: Diese sind über HTTP zustandslos, und Affinität bringt nur deine Instanzen aus dem Gleichgewicht.
- Geheimnisse im Key Vault, referenziert aus den App-Einstellungen. Geben Sie dem App Service eine verwaltete Identität und zeigen Sie die Einstellung auf den Tresor, sodass das Geheimnis niemals im Konfigurations-Blade oder in einem Deployment-Skript liegt.
- Datenschutzschlüssel im Blob Storage , sobald du Deployment-Slots nutzt oder über eine Instanz hinaus skalierst. Der Standard-Schlüsselring ist pro Slot, und ein Swap meldet alle ab.
WEBSITE_RUN_FROM_PACKAGE=1: optional und lohnenswert. Deployments werden atomar und das Inhaltsverzeichnis nur lesbar. Das Portal liest immer nur von seinem Inhaltsroot, sodass nichts kaputtgeht – es lädt den Puffer über den temporären Systemordner hoch, der beschreibbar bleibt.- Anwendungs-Einblicke: an. Das Framework protokolliert Lizenzablehnungen und Dataverse-Fehler durch
ILogger. Ohne Sink liest du den Logstream von Hand genau zu dem Moment, in dem du es lieber nicht tun würdest.
1. Erstellen Sie den App-Dienst
Drei Befehle. Ersetze deine eigenen Namen – myportal wird auf dieser Seite verwendet.
az group create --name myportal-rg --location eastus
az appservice plan create --name myportal-plan --resource-group myportal-rg --sku B1 --is-linux
az webapp create --name myportal --resource-group myportal-rg --plan myportal-plan --runtime "DOTNETCORE:10.0"
Der Name der Webanwendung wird https://myportal.azurewebsites.net und muss global eindeutig sein. Wählen Sie ihn bewusst: Wenn Sie keine benutzerdefinierte Domain vorne setzen, ist es die URL, an die Ihr Lizenzschlüssel gebunden wird.
2. Setzen Sie die Plattformoptionen ein
Das sind die, deren Standardwerte für ein Portal falsch sind.
az webapp config set --name myportal --resource-group myportal-rg --always-on true --min-tls-version 1.2 --http20-enabled true --web-sockets-enabled true
az webapp update --name myportal --resource-group myportal-rg --https-only true --client-affinity-enabled true
--web-sockets-enabled true— erforderlich für Blazor Server und Auto. Harmless auf React- und WebAssembly-Portalen, die niemals eine Schaltung öffnen.--client-affinity-enabled— es für Blazor Server und Auto belassen; für React und Blazor WebAssembly überlassentruefalse, damit Anfragen gleichmäßig über Instanzen verteilt sind.--always-on true— Basis-Stufe oder höher. Es ist nicht in kostenlosen oder geteilten Tarifen verfügbar.
3. Konfiguration
App-Service-Anwendungseinstellungen erscheinen als Umgebungsvariablen und überschreiben appsettings.json, was genau das ist, was du willst: Lass die Datei in Ruhe und setze hier die Werte pro Umgebung.
Wichtig
Benutzergeheimnisse werden nicht übertragen. Alles, was
dotnet user-secretsdu während der Entwicklung gespeichert hast, lebt nur auf deinem Rechner. Jeder dieser Schlüssel muss als Anwendungseinstellung – oder als Key Vault-Referenz – neu erstellt werden, sonst startet die bereitgestellte App nicht.
Verwenden Sie einen doppelten Unterstrich für den Abschnittstrenner: D365:ClientId wird zu D365__ClientId. Die Doppelpunktform funktioniert unter Windows App Service, aber nicht unter Linux, ebenso __ wie das Formular, das überall verwendet werden kann.
Immer notwendig
D365__Url— die URL der Dataverse-Umgebung, z. B.https://yourorg.crm.dynamics.com. Kein Geheimnis.D365__ClientId— die Client-ID der Entra-App-Registrierung, als die das Portal mit Dataverse verbunden ist. Kein Geheimnis.D365__ClientSecret– das Client-Geheimnis dieser Registrierung. Geheimnis: Verwenden Sie eine Key Vault-Referenz.D365__EmailSenderEmailAddress— die From-Adresse, von der das Portal Kontobestätigungs- und Passwort-Zurücksetzungsmails über Dataverse sendet. Am einfachsten zu vergessen, weil sie nicht darinappsettings.jsonist und die App ohne sie nicht startet.ASPNETCORE_ENVIRONMENT— setzen Sie es aufProduction. Dies ändert nicht nur die Fehlerseite: Auf einem React-Portal wird der SPA-Fallback nur außerhalb der Entwicklung registriert, sodass eine verbleibendeDevelopmentSeite Deep Links umleitet, anstatt die App zuhttp://localhost:5173servieren.
Erforderlich, wenn du diesen Anmeldeanbieter aktiviert hast
Authentication__Microsoft__ClientIdundAuthentication__Microsoft__ClientSecret– die Anmelderegistrierung, die eine andere App-Registrierung ist als die Dataverse-Registrierung. Siehe Entra ID Sign-In.Authentication__Google__ClientIdundAuthentication__Google__ClientSecret.Authentication__Facebook__AppIdundAuthentication__Facebook__AppSecret.
Optional
Azure__Translation__Key,DeepL__Translation__KeyoderGoogle__Translation__Key– je nachdem, welcher Maschinenübersetzungsanbieter Sie registriert haben. Lassen Sie es undeaktiviert, und die Seite zur Lokalisierungsverwaltung versteckt einfach ihr Übersetzungspanel; der Rest der Seite funktioniert weiterhin.PortalIdentity__SystemAdminRoleName— die Dataverse-Sicherheitsrolle, die Portaladministratoren Zugriff gewährt. Sie wird ausgeliefertappsettings.json; überschreibe sie hier, wenn der Rollenname je nach Umgebung unterschiedlich ist.
az webapp config appsettings set --name myportal --resource-group myportal-rg --settings ASPNETCORE_ENVIRONMENT=Production D365__Url="https://yourorg.crm.dynamics.com" D365__ClientId="00000000-0000-0000-0000-000000000000" D365__EmailSenderEmailAddress="portal@contoso.com"
Anmerkung
Die erforderlichen Schlüssel werden mit
GetRequiredValuegelesen, sodass ein fehlender Schlüssel beim Start ausgelöst wird, anstatt später beim ersten Dataverse-Aufruf fehlzuschlagen. Im App Service erscheint das als eine Seite, die nie auftaucht – lies den Logstream, und die Ausnahme nennt den Schlüssel.
4. Geben Sie dem Portal eine Adresse an, von der es senden kann
D365__EmailSenderEmailAddress ist der Grund, woher Kontobestätigung und Passwort-Reset-Mail stammen, und das Framework löst das, indem es nach einem Dataverse-Nutzer mit dieser Adresse, dann einer Warteschlange und schließlich einem Team sucht. Verwenden Sie eine Warteschlange. Es ist die einzige Option, die in Exchange überhaupt nicht bearbeitet werden muss: Das von Dataverse erstellte Postfach für eine Warteschlange zeigt auf das bestehende Exchange Online-Profil der Organisation, sodass es kein Postfach zum Bereitstellen und keine Lizenz zum Kauf für die Adresse gibt. Die Einstellung auf eine reale Person zu richten, kostet Sie stattdessen drei Dinge:
- Ihr Name steht auf jeder automatischen Nachricht. Empfänger sehen einen Kollegen als Absender eines Passwort-Zurücksetzens, das er nicht gesendet hat.
- Antworten landen in ihrem Posteingang. Menschen antworten auf E-Mails, die keine Antwort haben, und diese Antworten landen irgendwohin, wo niemand sie beobachtet.
- Das Portal bricht, wenn sie gehen. Das Deaktivieren des Kontos nimmt den Absender mit, und der Fehler taucht als Kontobestätigung auf, die leise nicht funktioniert.
Drei Schritte, alle innerhalb von Dataverse. Der MCP-Server führt die ersten beiden Schritte in einem Aufruf durch create_email_queue:
- Erstelle eine private Warteschlange mit der Adresse (z. B.
noreply@contoso.com), eingehende Lieferung Keine und ausgehende Zustellung Server-Side Synchronization. Der Name der Warteschlange ist das, was die Empfänger als Absender sehen, daher benennen sie sie nach dem Portal und nicht nach einer Person. - Genehmigen Sie die Adresse. Zwei Flags müssen übereinstimmen und liegen auf unterschiedlichen Datensätzen: der eigenen E-Mail-Adressgenehmigung der Warteschlange und der vom O365-Administrator genehmigte Postfach. Es wird auf beiden Seiten eine Warteschlange erstellt, die aussteht.
- Teste und aktiviere das Postfach im Power Platform Verwaltungszentrum → Einstellungen → E-Mail-Konfiguration → Mailboxen. Dies ist der eine Schritt, der von Hand erledigt werden muss, und es ist ein einzelner Knopf.
Wichtig
Ein nicht genehmigtes oder nicht getestetes Postfach scheitert stillschweigend. Dataverse akzeptiert die E-Mail, zeichnet sie auf und liefert sie nie – was aus Portalsicht nicht von einer erfolgreichen Sendung zu unterscheiden ist. Nichts wird angezeigt, nichts wird als Fehler protokolliert, und das erste Anzeichen von Problemen ist, dass ein Nutzer sagt, er habe seinen Bestätigungslink nie erhalten. Wenn Registrierungs-E-Mails nicht eintreffen, überprüfen Sie zuerst den Ausgangsstatus des Postfachs: Nicht ausführen bedeutet, dass dieser Schritt übersehen wurde.
5. Bewahren Sie die Geheimnisse im Key Vault auf
Gib der App eine verwaltete Identität, gewähre ihr Lesezugriff auf einen Tresor und gib die URI jedes Geheimnisses in die App-Einstellung ein, anstatt das Geheimnis selbst. App Service löst die Referenz für dich auf, und der Wert erscheint weder im Konfigurationsblade, in einem Skript noch in einem Deployment-Log.
az webapp identity assign --name myportal --resource-group myportal-rg --query principalId --output tsv
az keyvault create --name myportal-kv --resource-group myportal-rg --enable-rbac-authorization true
az role assignment create --assignee PRINCIPAL_ID --role "Key Vault Secrets User" --scope VAULT_RESOURCE_ID
az keyvault secret set --vault-name myportal-kv --name D365-ClientSecret --value THE_SECRET
az webapp config appsettings set --name myportal --resource-group myportal-rg --settings D365__ClientSecret="@Microsoft.KeyVault(SecretUri=https://myportal-kv.vault.azure.net/secrets/D365-ClientSecret/)"
Wenn ein Client-Geheimnis abläuft – Entra steht standardmäßig auf ein Jahr – fügen Sie dem Tresor eine neue Version hinzu und starten Sie die App neu. Die App-Einstellung selbst ändert sich nicht.
Der MCP-Server führt diese ganze Sequenz durch: create_managed_identity erstellt eine vom Nutzer zugewiesene Identität, enable_managed_identity hängt sie der App zu, create_key_vault erstellt den Tresor und gewährt dieser Identität Lesezugriff, und die geheimen Tools akzeptieren destination: "key-vault" dann – was ein frisch erstelltes Client-Geheimnis von Entra direkt in den Tresor sendet und nur die Referenz in den App-Einstellungen lässt. Der Wert wird nie zu einer wörtlichen Einstellung und geht nie durch die Hände von jemandem.
Wichtig
Der Name eines Key Vaults ist 90 Tage nach der Löschung reserviert. Soft Delete ist standardmäßig aktiviert und kann nicht deaktiviert werden, sodass das Löschen eines Tresors seinen Namen nicht freigibt – das Wiederherstellen eines Vaults mit demselben Namen innerhalb dieses Fensters erfordert eine explizite Löschung, die wiederum eine Berechtigung erfordert und irreversibel ist. Es ist die einzige Ressource hier, die nicht billig unmöglich ist, also wählen Sie den Namen genauso bewusst wie den des App Service.
Anmerkung
Noch besser: Lassen Sie das Dataverse-Client-Geheimnis ganz fallen. Setzen
D365__ManagedIdentityIdSie auf die Client-ID einer verwalteten Identität und das Portal authentifiziert sich als diese Identität bei Dataverse, ohne Geheimnis und daher ohne Ablauf. Es gibt keine Umgebungsprüfung und keinen Build-Switch: Die Einstellung gehört in die Konfiguration des App Services undappsettings.jsonnicht in , daher fehlt sie lokal und ist bei der Bereitstellung vorhanden, und ein Build verhält sich in beiden korrekt korrekt. Verwenden Sie eine vom Benutzer zugewiesene Identität – eine systemzugewiesene wird mit der App erstellt und vernichtet und unterscheidet sich je nach Deployment-Slot, sodass beim Neuaufbau der App eine neue Identität entsteht und der Dataverse-Anwendungsbenutzer auf der alten basiert. Die Identität benötigt weiterhin diesen Anwendungsbenutzer, erstellt aus seiner Anwendungs-ID und nicht aus der Haupt-ID, die das Azure-Portal zuerst anzeigt.
6. Veröffentlichen
Framework-abhängig veröffentlichen, die Ausgabe zippen, die Zip pushen. Auf einem React-Portal baut dasselbe dotnet publish auch das SPA und stadelt es in wwwroot.
dotnet publish ./MyPortal/MyPortal.csproj -c Release -o ./publish
Compress-Archive -Path ./publish/* -DestinationPath ./publish.zip -Force
az webapp deploy --name myportal --resource-group myportal-rg --src-path ./publish.zip --type zip
Zippen Sie den Inhalt des Publishing-Ordners, nicht des Ordners selbst – App Service entpackt das Archiv direkt in die Wurzel der Website, sodass ein verschachteltes Top-Level-Verzeichnis eine Seite erzeugt, die nichts bedient.
Der Publishing-Dialog von Visual Studio macht das Gleiche interaktiv, und ein GitHub Actions oder Azure Pipelines-Workflow macht das auf Push. Der einzige zusätzliche Schritt für ein React-Portal ist ein Node-Setup-Schritt vor dem Build, da dotnet publish es an NPM auslagert.
7. Die Lizenz auf die bereitgestellte URL zeigen
Die Website-Lizenz ist an eine URL gebunden. In der modellgetriebenen App Power Portals Pro öffnen (oder erstellen) Sie den Portal-Website-Eintrag mit Ihrem Lizenzschlüssel und setzen die URL auf die Produktions-URL des gerade installierten Portals – https://myportal.azurewebsites.netoder auf Ihre eigene Domain, falls eine davon vorankommt.
Registrieren Sie nur die Produktions-URL . Die Validierung akzeptiert -devauch , -test, -uat und -stage Suffix-Hosts sowie dieselben vier als führende Subdomains, sodass niedrigere Umgebungen keinen separaten Datensatz benötigen. Die Lizenzierungsseite enthält die vollständige Liste.
Wichtig
Mach das, bevor du den Datenverkehr sendest. Jeder datenbereitende Endpunkt überprüft die Lizenz, sodass das Portal angezeigt wird, bis der Datensatz existiert und mit dem Host übereinstimmt, aber jeder Datenaufruf kommt zurück
402.
8. Fügen Sie die Produktionsumleitung URI hinzu
Wenn das Portal eine Microsoft-Anmeldung anbietet, kennt die Registrierung der Anmelde-App immer noch nur deine localhost-Redirect-URI. Füge die bereitgestellte URI dazu hinzu – Entra akzeptiert mehrere, sodass die lokale weiterhin funktioniert:
https://myportal.azurewebsites.net/signin-microsoft
Dasselbe Muster gilt für die anderen Anbieter auf ihren eigenen Callback-Pfaden (/signin-google, /signin-facebook). Fügen Sie pro Umgebung einen und einen pro benutzerdefinierten Domain hinzu.
Einsatzplätze
Ein Staging-Slot und ein Tausch geben dir eine aufgewärmte App und einen sofortigen Rollback. Sie sind das Einzige, wofür es sich wirklich lohnt, B1 zu verlassen – und der Grund, es zu verlassen, wenn du sie brauchst, statt im Voraus. Zwei Dinge brauchen Pflege.
Datenschutzschlüssel sind pro Slot. ASP.NET Core speichert den Schlüsselring unter %HOME%, von dem jeder Slot eine eigene Kopie hat, sodass ein Swap ihn ersetzt – und jedes Authentifizierungscookie, das vom vorherigen Slot ausgegeben wird, wird unentschlüsselbar. Alle sind ausgeloggt. Stellen Sie den Schlüsselring an einen Ort, an dem beide Slots gemeinsam sind, bevor Sie auf Swapping setzen:
builder.Services.AddDataProtection()
.PersistKeysToAzureBlobStorage(new Uri(blobUri), new DefaultAzureCredential())
.ProtectKeysWithAzureKeyVault(new Uri(keyUri), new DefaultAzureCredential());
Markiere die umgebungsspezifischen Einstellungen als Slot-Einstellungen , damit sie während eines Swaps zurückbleiben. Die URL der Dataverse-Umgebung ist diejenige, die ankommt: Ohne sie bringt das Tauschen eines Staging-Slots, der auf eine Sandbox zeigt, diese Sandbox-Verbindung in die Produktion.
Skalieren
Skalieren ist eine Entscheidung, die man trifft, wenn man den Bedarf dafür misst, nicht wenn man bereitstellt. Eine Instanz der Standardstufe führt überraschend viel Portal-Verkehr.
- Blazor Server / Auto: Behalten Sie die Sitzungsaffinität an und planen Sie etwa 250 KB Serverspeicher pro gleichzeitiger Leitung als Ausgangspunkt ein, bevor Sie Ihren eigenen messen. Azure SignalR Service ist in App Service nicht erforderlich – es ist ein Werkzeug für sehr hohe Verbindungszahlen oder global verteilte Nutzer.
- React / Blazor WebAssembly: Schalte die Sitzungsaffinität aus und skaliere horizontal. Die Anfragen sind zustandslos, daher sind Instanzen austauschbar.
- Die Vorlagen registrieren
AddDistributedMemoryCache(), was pro Instanz ist. In mehr als einer Instanz tauschen Sie sie gegen einen echten verteilten Cache, sodass Metadaten- und Lokalisierungscaches geteilt werden und nicht auf jedem einzelnen neu aufgebaut werden.
All das von einem KI-Agenten aus erledigt
Der Power Portals Pro MCP-Server kann jeden Schritt auf dieser Seite ausführen. Binden Sie den Ordner einmal an ein Abonnement, an einem Terminal – die Bindung gehört zu diesem Ordner, sodass mehrere Projekte gleichzeitig verschiedene Kunden ansprechen können und sich maschinell nichts ändert:
ppp-mcp azure login
check_deployment– derjenige, den man zuerst greifen muss. Es vergleicht, was das Projekt braucht, mit dem, was der App Service hat, und nennt, was falsch ist: eine erforderliche Einstellung, die nur in Ihren Benutzergeheimnissen existierte, die Umgebung, die in Entwicklung verbleibt, WebSockets auf einem Blazor-Portal, ein Portal-Website-Datensatz, der den Host nicht abdeckt. Schreibgeschützt, daher ist es sicher, gegen die Produktion auszuführen.get_deployment_plan— die Schritte und jede Planstufe mit ihrem aktuellen tatsächlichen Preis aus Azures öffentlicher Preisliste.create_app_service— Ressourcengruppe, Plan und Web-App, wobei das WebSocket- und Affinity-Paar bereits für Ihren Stack festgelegt ist.set_app_service_settings— führt Einstellungen zusammen, anstatt sie zu ersetzen, sodass sie die Einstellungen mit deinen Geheimnissen nicht löschen kann.deploy_to_app_service— baut sich mitdotnet publishund pusht das Ergebnis voran.create_dataverse_app_registration,create_signin_app_registrationundadd_app_registration_redirect_uri— die Entra-Seite der Schritte 6 und 7, wobei Sie die Verzeichnisrolle Ihres eigenen angemeldeten Kontos verwenden. Ein erstelltes Client-Geheimnis geht direkt in die Benutzergeheimnisse oder die App Service-Einstellung und wird nie angezeigt.create_managed_identity,enable_managed_identityundcreate_key_vault— die Identität und der Tresor darüber, mit den für dich erstellten Rollenzuweisungen und erneut versucht, während sie sich weiterentwickeln.create_email_queue— die No-Response-Absender-Warteschlange aus Schritt 4, erstellt und in einem Aufruf genehmigt.
Anmerkung
Jedes Tool, das in Azure etwas ändert, bittet dich zuerst zu bestätigen und teilt dir vorher mit, was es kostet – die tatsächliche monatliche Summe für deine Region, mit dem Hinweis, dass die Einzelhandelsliste jede Enterprise Agreement oder Reservierung ignoriert, die du hältst. Tools, die nur lesen, werden nie prompt. Der Server verwendet nicht die Azure-CLI und liest oder ändert niemals seinen angemeldeten Zustand.
Fehlerbehebung
- Die Seite taucht nie auf. Meistens fehlt eine erforderliche App-Einstellung. Die Start-Ausnahme nennt den Schlüssel – liest ihn im Logstream oder bei Diagnose und löst Probleme.
- Das Portal wird angezeigt, aber jeder Datenaufruf gibt 402 zurück. Die Lizenzprüfung lehnt den Host ab. Bestätigen Sie, dass die URL des Portal-Website-Datensatzes mit dem Host übereinstimmt, den der Browser tatsächlich nutzt, und dass die verwaltete Lösung in der Umgebung installiert ist, mit der das Portal verbunden ist. Die Ablehnung wird mit genau dem Host, dem weitergeleiteten Host und dem Schema protokolliert, die validiert wurden.
- Umleitungsschleifen oder eine
http://URL dorthin, wo Sie erwartethttps://haben. Die App berücksichtigt die weitergeleiteten Header vom App Service Frontend nicht. Stellen Sie so ein,ASPNETCORE_FORWARDEDHEADERS_ENABLED=truedass das Anfrageschema und die Client-IP die ursprüngliche Anfrage widerspiegeln. - "Failed to connect via WebSockets, using the Long Polling Fallback" in der Browser-Konsole eines Blazor-Portals — Web Sockets ist im App Service weiterhin ausgeschaltet.
- Jeder ist nach einer Bereitstellung oder einem Swap abgemeldet. Der Datenschutz-Schlüsselring wurde geändert; siehe oben Deployment-Slots.
- Ein React Deep Link 404s oder leitet zu localhost
ASPNETCORE_ENVIRONMENTum. ist nichtProduction– der SPA-Fallback wird nur außerhalb der Entwicklung registriert. - Nichts Nützliches in den Protokollen. App Service Anwendungsprotokollierung ist standardmäßig deaktiviert: Dateisystemprotokollierung auf Informationsebene aktivieren und dann mit Tail ausführen
az webapp log tail.
