Sdílet prostřednictvím


Nasazení a škálování aplikace ASP.NET Core v Azure Container Apps

Aplikace nasazené do Azure, u kterých dochází k přerušovanému vysokému zatížení, přináší výhodu škálovatelnosti, aby splňovaly poptávku. Škálovatelné aplikace můžou vertikálně navýšit kapacitu, aby se zajistila kapacita během špiček úloh, a potom automaticky snížit kapacitu, když špička klesne, což může snížit náklady. Horizontální škálování (horizontální navýšení kapacity) přidává nové instance prostředku, jako jsou virtuální počítače nebo repliky databáze. Tento článek ukazuje, jak nasadit horizontálně škálovatelnou aplikaci ASP.NET Core do aplikací kontejnerů Azure provedením následujících úloh:

  1. Nastavení ukázkového projektu
  2. Nasazení aplikace do Azure Container Apps
  3. Škálování a řešení potíží s aplikací
  4. Vytvoření služeb Azure
  5. Připojení služeb Azure
  6. Konfigurace a opětovné nasazení aplikace

Tento článek používá Razor stránky, ale většina z nich platí pro ostatní aplikace ASP.NET Core.

V některých případech se základní aplikace ASP.NET Core dají škálovat bez zvláštních aspektů. Aplikace, které využívají určité funkce architektury nebo vzory architektury, ale vyžadují další konfigurace, včetně následujících:

  • Zabezpečené odesílání formulářů: Razor Stránky, MVC a aplikace webového rozhraní API se často spoléhají na odesílání formulářů. Ve výchozím nastavení tyto aplikace používají k zabezpečení požadavků křížové tokeny pro padělání a interní služby ochrany dat. Při nasazení do cloudu musí být tyto aplikace nakonfigurované tak, aby spravovaly obavy služby ochrany dat v zabezpečeném centralizovaném umístění.

  • SignalRokruhy: Blazor Server Aplikace vyžadují použití centralizované služby AzureSignalR, aby bylo možné bezpečně škálovat. Tyto služby využívají také služby ochrany dat uvedené dříve.

  • Centralizované ukládání do mezipaměti nebo služby správy stavu: Škálovatelné aplikace můžou k poskytování distribuované mezipaměti používat Azure Cache for Redis . Úložiště Azure může být potřeba k ukládání stavu pro architektury, jako je Microsoft Orleans, což může pomoct při psaní aplikací, které spravují stav v mnoha různých instancích aplikací.

Kroky v tomto článku ukazují, jak správně řešit předchozí obavy nasazením škálovatelné aplikace do Azure Container Apps. Většinakonceptch Aplikace Azure ch

Nastavení ukázkového projektu

Pomocí ukázkové aplikace GitHub Explorer můžete postupovat podle tohoto kurzu. Naklonujte aplikaci z GitHubu pomocí následujícího příkazu:

git clone "https://github.com/dotnet/AspNetCore.Docs.Samples.git"

Přejděte do /tutorials/scalable-razor-apps/start složky a otevřete ScalableRazor.csprojsložku .

Ukázková aplikace používá vyhledávací formulář k procházení úložišť GitHub podle názvu. Tento formulář spoléhá na integrované služby ochrany dat ASP.NET Core, které se týkají ochrany proti padělání. Když se aplikace horizontálně škáluje ve službě Container Apps, služba ochrany dat ve výchozím nastavení vyvolá výjimku.

Otestování aplikace

  1. Spusťte aplikaci v sadě Visual Studio. Projekt obsahuje soubor Dockeru, což znamená, že šipka vedle tlačítka Spustit je možné vybrat, aby se aplikace spustila pomocí nastavení Docker Desktopu nebo standardního webového serveru ASP.NET Core.

Pomocí vyhledávacího formuláře vyhledejte úložiště GitHub podle názvu.

A screenshot showing the GitHub Explorer app.

Nasazení aplikace do Azure Container Apps

Visual Studio se používá k nasazení aplikace do Azure Container Apps. Kontejnerové aplikace poskytují spravovanou službu navrženou tak, aby zjednodušila hostování kontejnerizovaných aplikací a mikroslužeb.

Poznámka

Mnoho prostředků vytvořených pro aplikaci vyžaduje umístění. Pro tuto aplikaci není umístění důležité. Skutečná aplikace by měla vybrat umístění nejblíže klientům. Možná budete chtít vybrat umístění blízko vás.

  1. V Průzkumníku řešení sady Visual Studio klikněte pravým tlačítkem na uzel projektu nejvyšší úrovně a vyberte Publikovat.

  2. V dialogovém okně publikování vyberte Azure jako cíl nasazení a pak vyberte Další.

  3. Pro konkrétní cíl vyberte Azure Container Apps (Linux) a pak vyberte Další.

  4. Vytvořte novou aplikaci kontejneru, do které se má nasadit. Výběrem zelené + ikony otevřete nové dialogové okno a zadejte následující hodnoty:

    A screenshot showing Visual Studio deployment.

    • Název aplikace kontejneru: Ponechte výchozí hodnotu nebo zadejte název.
    • Název předplatného: Vyberte předplatné, do které se má nasadit.
    • Skupina prostředků: Vyberte Nový a vytvořte novou skupinu prostředků s názvem msdocs-scalable-razor.
    • Prostředí kontejnerových aplikací: Výběrem možnosti Nový otevřete dialogové okno prostředí kontejnerových aplikací a zadejte následující hodnoty:
      • Název prostředí: Ponechte výchozí hodnotu.
      • Umístění: Vyberte umístění blízko vás.
      • Pracovní prostor Služby Azure Log Analytics: Výběrem možnosti Nový otevřete dialogové okno pracovního prostoru služby Log Analytics.
        • Název: Ponechte výchozí hodnotu.
        • Umístění: Vyberte umístění blízko vás a potom kliknutím na ok zavřete dialogové okno.
      • Výběrem tlačítka OK zavřete dialogové okno prostředí kontejnerových aplikací.
    • Výběrem možnosti Vytvořit zavřete původní dialogové okno aplikace kontejneru. Visual Studio vytvoří prostředek aplikace kontejneru v Azure.
  5. Po vytvoření prostředku se ujistěte, že je vybraný v seznamu aplikací kontejneru, a pak vyberte Další.

  6. K uložení publikovaného artefaktu image pro vaši aplikaci budete muset vytvořit službu Azure Container Registry. Na obrazovce registru kontejneru vyberte zelenou + ikonu.

    A screenshot showing how to create a new container registry.

  7. Ponechte výchozí hodnoty a pak vyberte Vytvořit.

    A screenshot showing the values for a new container registry.

  8. Po vytvoření registru kontejneru se ujistěte, že je vybraný, a pak výběrem možnosti Dokončit zavřete pracovní postup dialogového okna a zobrazte souhrn profilu publikování.

    Pokud vás Visual Studio vyzve, abyste povolili uživateli Správa přístup k publikovanému kontejneru Dockeru, vyberte Ano.

  9. Výběrem možnosti Publikovat v pravém horním rohu souhrnu profilu publikování nasadíte aplikaci do Azure.

Po dokončení nasazení visual Studio spustí prohlížeč, aby se zobrazila hostovaná aplikace. Microsoft Hledání v poli formuláře a zobrazí se seznam úložišť.

Škálování a řešení potíží s aplikací

Aplikace v současné době funguje bez jakýchkoli problémů, ale chtěli bychom aplikaci škálovat napříč více instancemi v očekávání velkých objemů provozu.

  1. Na webu Azure Portal vyhledejte razorscaling-app-**** aplikaci kontejneru na panelu hledání nejvyšší úrovně a vyberte ji z výsledků.
  2. Na stránce přehledu vyberte v levém navigačním panelu škálovat a pak vyberte + Upravit a nasadit.
  3. Na stránce revizí přepněte na kartu Měřítko .
  4. Nastavte minimální i maximální počet instancí na 4 a pak vyberte Vytvořit. Tato změna konfigurace zaručuje horizontální škálování aplikace napříč čtyřmi instancemi.

Vraťte se do aplikace. Když se stránka načte, zpočátku se zobrazí, že všechno funguje správně. Pokud je ale hledaný termín zadán a odeslán, může dojít k chybě. Pokud se chyba nezobrazí, odešlete formulář několikrát několikrát.

Řešení potíží s chybou

Není to okamžitě zřejmé, proč žádosti o vyhledávání selhávají. Nástroje prohlížeče označují, že byla odeslána odpověď 400 Chybný požadavek. Funkce protokolování aplikací kontejnerů ale můžete použít k diagnostice chyb, ke kterým dochází ve vašem prostředí.

  1. Na stránce přehledu aplikace kontejneru vyberte v levém navigačním panelu protokoly .

  2. Na stránce Protokoly zavřete automaticky otevírané okno, které se otevře, a přejděte na kartu Tabulky.

  3. Rozbalte položku Vlastní protokoly a zobrazte uzel ContainerAppConsoleLogs_CL. Tato tabulka obsahuje různé protokoly pro aplikaci kontejneru, na kterou je možné dotazovat, aby se vyřešily problémy.

    A screenshot showing the container app logs.

  4. V editoru dotazů vytvořte základní dotaz pro vyhledání nedávných výjimek v tabulce ContainerAppConsoleLogs_CL Protokoly , jako je například následující skript:

    ContainerAppConsoleLogs_CL
    | where Log_s contains "exception"
    | sort by TimeGenerated desc
    | limit 500
    | project ContainerAppName_s, Log_s
    

    Předchozí dotaz vyhledá v tabulce ContainerAppConsoleLogs_CL všechny řádky, které obsahují výjimku slova. Výsledky jsou seřazené podle času vygenerovaného, omezeného na 500 výsledků a obsahují pouze ContainerAppName_s a Log_s sloupce, aby se výsledky snadněji četly.

  5. Vyberte Spustit, zobrazí se seznam výsledků. Pročtěte si protokoly a všimněte si, že většina z nich souvisí s antiforgery tokeny a kryptografií.

    A screenshot showing the logs query.

    Důležité

    Chyby v aplikaci jsou způsobeny službami ochrany dat .NET. Pokud je spuštěno více instancí aplikace, neexistuje žádná záruka, že požadavek HTTP POST na odeslání formuláře je směrován do stejného kontejneru, který původně načetl stránku z požadavku HTTP GET. Pokud jsou požadavky zpracovávány různými instancemi, antiforgery tokeny nejsou zpracovávány správně a dojde k výjimce.

    V následujících krocích se tento problém vyřeší centralizací klíčů ochrany dat ve službě Úložiště Azure a jejich ochranou pomocí služby Key Vault.

Vytvoření služeb Azure

Pokud chcete vyřešit předchozí chyby, vytvoří se následující služby a připojí se k aplikaci:

  • Účet úložiště Azure: Zpracovává ukládání dat pro službu Data Protection Services. Poskytuje centralizované umístění pro ukládání klíčových dat při škálování aplikace. Účty úložiště se dají použít také k ukládání dokumentů, dat fronty, sdílených složek a téměř jakéhokoli typu dat objektů blob.
  • Azure KeyVault: Tato služba ukládá tajné kódy pro aplikaci a slouží ke správě problémů šifrování pro službu Data Protection Services.

Vytvoření služby účtu úložiště

  1. Na panelu hledání na webu Azure Portal zadejte Storage accounts a vyberte odpovídající výsledek.
  2. Na stránce se seznamem účtů úložiště vyberte + Vytvořit.
  3. Na kartě Základy zadejte následující hodnoty:
    • Předplatné: Vyberte stejné předplatné, které jste zvolili pro aplikaci typu kontejner.
    • Skupina prostředků: Vyberte skupinu prostředků msdocs-scalable-razor , kterou jste vytvořili dříve.
    • Název účtu úložiště: Pojmenujte účet scalablerazorstorageXXXX, kde X jsou náhodná čísla podle vašeho výběru. Tento název musí být jedinečný ve všech Azure.
    • Oblast: Vyberte stejnou oblast, kterou jste předtím vybrali.
  4. Zbývající hodnoty ponechte ve výchozím nastavení a vyberte Zkontrolovat. Jakmile Azure ověří vstupy, vyberte Vytvořit.

Azure zřídí nový účet úložiště. Po dokončení úkolu zvolte Přejít k prostředku a zobrazte novou službu.

Vytvoření kontejneru úložiště

Vytvořte kontejner pro ukládání klíčů ochrany dat aplikace.

  1. Na stránce přehledu nového účtu úložiště vyberte v levém navigačním panelu prohlížeč úložiště.
  2. Vyberte kontejnery objektů blob.
  3. Výběrem + Přidat kontejner otevřete rozevírací nabídku Nový kontejner .
  4. Zadejte název škálovatelných klíčů, zbytek nastavení ponechte ve výchozím nastavení a pak vyberte Vytvořit.

Nové kontejnery se zobrazí v seznamu stránek.

Vytvoření služby trezoru klíčů

Vytvořte trezor klíčů pro uložení klíčů, které chrání data v kontejneru úložiště objektů blob.

  1. Na panelu hledání na webu Azure Portal zadejte Key Vault a vyberte odpovídající výsledek.
  2. Na stránce výpisu trezoru klíčů vyberte + Vytvořit.
  3. Na kartě Základy zadejte následující hodnoty:
    • Předplatné: Vyberte stejné předplatné, které bylo dříve vybráno.
    • Skupina prostředků: Vyberte dříve vytvořenou skupinu prostředků msdocs-scalable-razor .
    • Název služby Key Vault: Zadejte název scalablerazorvaultXXXX.
    • Oblast: Vyberte oblast blízko vaší polohy.
  4. Zbývající nastavení ponechte ve výchozím nastavení a pak vyberte Zkontrolovat a vytvořit. Počkejte, až Azure ověří vaše nastavení, a pak vyberte Vytvořit.

Azure zřídí nový trezor klíčů. Po dokončení úkolu vyberte Přejít k prostředku a zobrazte novou službu.

Vytvoření klíče

Vytvořte tajný klíč pro ochranu dat v účtu úložiště objektů blob.

  1. Na hlavní stránce přehledu trezoru klíčů vyberte v levém navigačním panelu klíče .
  2. Na stránce Vytvořit klíč vyberte + Vygenerovat/Importovat a otevřete rozevírací nabídku Vytvořit klíč.
  3. Do pole Název zadejte razorkey. Ponechte zbývající nastavení na výchozích hodnotách a pak vyberte Vytvořit. Na stránce seznamu klíčů se zobrazí nový klíč.

Připojení služeb Azure

Aplikace kontejneru vyžaduje zabezpečené připojení k účtu úložiště a službám trezoru klíčů, aby bylo možné správně vyřešit chyby ochrany dat a správně škálovat. Nové služby jsou propojené pomocí následujících kroků:

Důležité

Rozšíření přiřazení rolí zabezpečení prostřednictvím služby Připojení or a dalších nástrojů obvykle trvá minutu nebo dvě a v některých výjimečných případech může trvat až osm minut.

Připojení účtu úložiště

  1. Na webu Azure Portal přejděte na stránku přehledu kontejnerové aplikace.
  2. V levém navigačním panelu vyberte Konektor služby.
  3. Na stránce Service Připojení or zvolte + Vytvořit, aby se otevřel informační panel Pro vytvoření Připojení ion a zadejte následující hodnoty:
    • Kontejner: Vyberte dříve vytvořenou aplikaci kontejneru.
    • Typ služby: Zvolte Úložiště – objekt blob.
    • Předplatné: Vyberte dříve použité předplatné.
    • název Připojení: Ponechte výchozí hodnotu.
    • Účet úložiště: Vyberte dříve vytvořený účet úložiště.
    • Typ klienta: Vyberte .NET.
  4. Vyberte Další: Postup ověřování k dalšímu kroku.
  5. Vyberte spravovanou identitu přiřazenou systémem a zvolte Další: Sítě.
  6. Ponechte vybrané výchozí možnosti sítě a pak vyberte Zkontrolovat a vytvořit.
  7. Jakmile Azure ověří nastavení, vyberte Vytvořit.

Konektor služby umožňuje spravované identitě přiřazené systémem v aplikaci kontejneru. Také přiřadí k identitě roli Přispěvatel dat objektů blob služby Storage, aby mohl provádět operace s daty v kontejnerech úložiště.

Připojení trezoru klíčů

  1. Na webu Azure Portal přejděte na stránku s přehledem kontejnerové aplikace.
  2. V levém navigačním panelu vyberte Konektor služby.
  3. Na stránce Service Připojení or zvolte + Vytvořit, aby se otevřel informační panel Pro vytvoření Připojení ion a zadejte následující hodnoty:
    • Kontejner: Vyberte dříve vytvořenou aplikaci kontejneru.
    • Typ služby: Zvolte Key Vault.
    • Předplatné: Vyberte dříve použité předplatné.
    • název Připojení: Ponechte výchozí hodnotu.
    • Trezor klíčů: Vyberte dříve vytvořený trezor klíčů.
    • Typ klienta: Vyberte .NET.
  4. Vyberte Další: Postup ověřování k dalšímu kroku.
  5. Vyberte spravovanou identitu přiřazenou systémem a zvolte Další: Sítě.
  6. Ponechte vybrané výchozí možnosti sítě a pak vyberte Zkontrolovat a vytvořit.
  7. Jakmile Azure ověří nastavení, vyberte Vytvořit.

Konektor služby přiřadí identitě roli, aby mohl provádět datové operace s klíči trezoru klíčů.

Konfigurace a opětovné nasazení aplikace

Byly vytvořeny potřebné prostředky Azure. V této části je kód aplikace nakonfigurovaný tak, aby používal nové prostředky.

  1. Nainstalujte následující balíčky NuGet:

    • Azure.Identity: Poskytuje třídy pro práci se službami pro správu identit a přístupu Azure.
    • Microsoft.Extensions.Azure: Poskytuje užitečné metody rozšíření pro provádění základních konfigurací Azure.
    • Azure.Extensions.AspNetCore.DataProtection.Blobs: Umožňuje ukládat klíče ASP.NET Core DataProtection ve službě Azure Blob Storage, aby se klíče mohly sdílet napříč několika instancemi webové aplikace.
    • Azure.Extensions.AspNetCore.DataProtection.Keys: Umožňuje ochranu neaktivních uložených klíčů pomocí funkce Šifrování a zabalení klíčů služby Azure Key Vault.
    dotnet add package Azure.Identity
    dotnet add package Microsoft.Extensions.Azure
    dotnet add package Azure.Extensions.AspNetCore.DataProtection.Blobs
    dotnet add package Azure.Extensions.AspNetCore.DataProtection.Keys
    
  2. Aktualizujte Program.cs následujícím zvýrazněným kódem:

    using Azure.Identity;
    using Microsoft.AspNetCore.DataProtection;
    using Microsoft.Extensions.Azure;
    
    var builder = WebApplication.CreateBuilder(args);
    var BlobStorageUri = builder.Configuration["AzureURIs:BlobStorage"];
    var KeyVaultURI = builder.Configuration["AzureURIs:KeyVault"];
    
    builder.Services.AddRazorPages();
    builder.Services.AddHttpClient();
    builder.Services.AddServerSideBlazor();
    
    builder.Services.AddAzureClientsCore();
    
    builder.Services.AddDataProtection()
                    .PersistKeysToAzureBlobStorage(new Uri(BlobStorageUri),
                                                    new DefaultAzureCredential())
                    .ProtectKeysWithAzureKeyVault(new Uri(KeyVaultURI),
                                                    new DefaultAzureCredential());
    var app = builder.Build();
    
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.UseAuthorization();
    
    app.MapRazorPages();
    
    app.Run();
    

Předchozí změny umožňují aplikaci spravovat ochranu dat pomocí centralizované škálovatelné architektury. DefaultAzureCredential zjistí dříve povolené konfigurace spravované identity při opětovném nasazení aplikace.

Aktualizujte zástupné symboly v AzureURIs části appsettings.json souboru tak, aby obsahovaly následující:

  1. <storage-account-name> Zástupný symbol nahraďte názvem scalablerazorstorageXXXX účtu úložiště.

  2. <container-name> Zástupný symbol nahraďte názvem kontejneru scalablerazorkeys úložiště.

  3. <key-vault-name> Zástupný symbol nahraďte názvem trezoru scalablerazorvaultXXXX klíčů.

  4. <key-name> Zástupný symbol v identifikátoru URI razorkey trezoru klíčů nahraďte názvem, který jste vytvořili dříve.

    {
      "GitHubURL": "https://api.github.com",
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*",
      "AzureURIs": {
        "BlobStorage": "https://<storage-account-name>.blob.core.windows.net/<container-name>/keys.xml",
        "KeyVault": "https://<key-vault-name>.vault.azure.net/keys/<key-name>/"
      }
    }
    

Opětovné nasazení aplikace

Aplikace je teď správně nakonfigurovaná tak, aby používala dříve vytvořené služby Azure. Znovu nasaďte aplikaci, aby se změny kódu použily.

  1. V Průzkumníku řešení klikněte pravým tlačítkem na uzel projektu a vyberte Publikovat.
  2. V zobrazení souhrnu profilu publikování vyberte tlačítko Publikovat v pravém horním rohu.

Visual Studio znovu nasadí aplikaci do prostředí kontejnerových aplikací vytvořených dříve. Po dokončení procesů se prohlížeč spustí na domovské stránce aplikace.

Aplikaci znovu otestujte vyhledáním Microsoftu ve vyhledávacím poli. Stránka by se teď měla znovu načíst se správnými výsledky při každém odeslání.

Konfigurace rolí pro místní vývoj

Stávající kód a konfigurace aplikace můžou také fungovat při místním spuštění během vývoje. Třída DefaultAzureCredential nakonfigurovaná dříve dokáže vyzvednout přihlašovací údaje místního prostředí pro ověření ve službách Azure. Aby ověřování fungovalo, budete muset přiřadit stejné role vlastnímu účtu, který byl přiřazen spravované identitě vaší aplikace. Mělo by to být stejný účet, který používáte pro přihlášení k sadě Visual Studio nebo Azure CLI.

Přihlášení k místnímu vývojovému prostředí

Abyste mohli přihlašovací údaje vyzvednout, musíte být přihlášení k Azure CLI, sadě Visual Studio nebo Azure PowerShellu DefaultAzureCredential.

az login

Přiřazení rolí k vývojářskému účtu

  1. Na webu Azure Portal přejděte k dříve vytvořenému scalablerazor**** účtu úložiště.
  2. V levém navigačním panelu vyberte Řízení přístupu (IAM ).
  3. V rozevírací nabídce zvolte + Přidat a potom přidat přiřazení role.
  4. Na stránce Přidat přiřazení role vyhledejte Storage blob data contributor, vyberte odpovídající výsledek a pak vyberte Další.
  5. Ujistěte se, že je vybrán uživatel, skupina nebo instanční objekt , a pak vyberte + Vybrat členy.
  6. V informačním rámečku Vybrat členy vyhledejte svůj vlastní účet user@domain a vyberte ho z výsledků.
  7. Zvolte Další a pak vyberte Zkontrolovat a přiřadit. Jakmile Azure ověří nastavení, znovu vyberte Zkontrolovat a přiřadit .

Jak už bylo uvedeno dříve, může rozšíření oprávnění přiřazení role trvat minutu nebo dvě, nebo ve výjimečných případech až osm minut.

Opakujte předchozí kroky a přiřaďte k účtu roli, aby mohl přistupovat ke službě trezoru klíčů a tajnému kódu.

  1. Na webu Azure Portal přejděte k dříve vytvořenému trezoru razorscalingkeys klíčů.
  2. V levém navigačním panelu vyberte Řízení přístupu (IAM ).
  3. V rozevírací nabídce zvolte + Přidat a potom přidat přiřazení role.
  4. Na stránce Přidat přiřazení role vyhledejte Key Vault Crypto Service Encryption User, vyberte odpovídající výsledek a pak vyberte Další.
  5. Ujistěte se, že je vybrán uživatel, skupina nebo instanční objekt , a pak vyberte + Vybrat členy.
  6. V informačním rámečku Vybrat členy vyhledejte svůj vlastní účet user@domain a vyberte ho z výsledků.
  7. Zvolte Další a pak vyberte Zkontrolovat a přiřadit. Jakmile Azure ověří nastavení, znovu vyberte Zkontrolovat a přiřadit .

Možná budete muset znovu počkat, než se toto přiřazení role rozšíří.

Pak se můžete vrátit do sady Visual Studio a spustit aplikaci místně. Kód by měl dál fungovat podle očekávání. DefaultAzureCredential používá vaše stávající přihlašovací údaje ze sady Visual Studio nebo Azure CLI.

Spolehlivé vzory webových aplikací

Pokyny k vytvoření moderní, spolehlivé, výkonné, testovatelné, nákladově efektivní a škálovatelné aplikace ASP.NET Core, ať už od nuly nebo refaktoringu stávající aplikace, najdete v článku o modelu Reliable Web App Pattern for.NETYouTube.