Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Framework a základní aplikace musí používat identické rozložení virtuálních adresářů.
Nastavení virtuálního adresáře se používá pro generování tras, autorizaci a další služby v systému. V tomto okamžiku nebyla nalezena žádná spolehlivá metoda, která by umožňovala různé virtuální adresáře, protože ASP.NET Framework funguje.
V některých scénářích přírůstkového upgradu je užitečné, aby nová aplikace ASP.NET Core mohla komunikovat s původní aplikací ASP.NET.
Běžné scénáře, které toto umožňuje:
- Použít YARP k návratu na starší verzi aplikace
- Vzdálené ověřování aplikací
- Vzdálená relace
Hodnoty konfigurace
Pokud chcete aplikaci ASP.NET Core povolit komunikaci s ASP.NET aplikací, je nutné provést v každé aplikaci několik malých změn.
V obou aplikacích musíte nakonfigurovat dvě konfigurační hodnoty:
-
RemoteAppApiKey: Klíč (nutný k parsování jako identifikátor GUID), který se sdílí mezi těmito dvěma aplikacemi. Tato hodnota by měla být podobná GUID jako12345678-1234-1234-1234-123456789012. -
RemoteAppUri: Identifikátor URI vzdálené aplikace ASP.NET Framework (vyžaduje se pouze v konfiguraci aplikace ASP.NET Core). To by měla být úplná adresa URL, kde je hostovaná aplikace ASP.NET Framework, napříkladhttps://localhost:44300.https://myapp.example.com
Konfigurace aplikace ASP.NET Framework
Důležité
Aplikace ASP.NET Framework by měla být hostovaná s povoleným protokolem SSL. V nastavení vzdálené aplikace pro přírůstkovou migraci není nutné mít přímý přístup externě. Doporučuje se povolit přístup pouze z klientské aplikace přes proxy server.
V případě aplikací ASP.NET Framework přidejte hodnoty do web.config uvnitř sekce <appSettings>.
Důležité
ASP.NET Framework ukládá své appSettings do web.config. Lze je ale načíst z jiných zdrojů (například proměnných prostředí) pomocí Tvůrce konfigurací. To usnadňuje sdílení hodnot konfigurace mezi místními a vzdálenými aplikacemi v tomto nastavení.
<appSettings>
<add key="RemoteAppApiKey" value="..." />
</appSettings>
Pokud chcete nakonfigurovat aplikaci, aby byla k dispozici pro zpracování požadavků z klienta ASP.NET Core, nastavte následující:
Instalace balíčku NuGet
Microsoft.AspNetCore.SystemWebAdapters.FrameworkServicesDo metody v
Application_Startsouboru přidejte konfigurační kódGlobal.asax.cs:protected void Application_Start() { HttpApplicationHost.RegisterHost(builder => { builder.AddSystemWebAdapters() .AddRemoteAppServer(options => { // ApiKey is a string representing a GUID options.ApiKey = System.Configuration.ConfigurationManager.AppSettings["RemoteAppApiKey"]; }); }); // ...existing code... }Přidejte modul
SystemWebAdapterModuledoweb.config, pokud ještě nebyl přidán pomocí NuGet. Tato konfigurace modulu se vyžaduje pro scénáře hostování služby IIS. ModulSystemWebAdapterModulese nepřidá automaticky při použití projektů stylu sady SDK pro ASP.NET Core.<system.webServer> <modules> + <remove name="SystemWebAdapterModule" /> + <add name="SystemWebAdapterModule" type="Microsoft.AspNetCore.SystemWebAdapters.SystemWebAdapterModule, Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices" preCondition="managedHandler" /> </modules> </system.webServer>
Konfigurace aplikace ASP.NET Core
Pro aplikace ASP.NET Core přidejte tyto hodnoty do appsettings.json.
{
"RemoteAppApiKey": "...",
"RemoteAppUri": "https://localhost:44300"
}
Pokud chcete nastavit aplikaci ASP.NET Core tak, aby mohla odesílat požadavky do aplikace ASP.NET, nakonfigurujte vzdáleného klienta aplikace voláním AddRemoteAppClient po registraci služeb System.Web Adapter v AddSystemWebAdaptersaplikaci .
Přidejte do Program.cs souboru tuto konfiguraci:
builder.Services.AddSystemWebAdapters()
.AddRemoteAppClient(options =>
{
options.RemoteAppUrl = new(builder.Configuration["RemoteAppUri"]);
options.ApiKey = builder.Configuration["RemoteAppApiKey"];
});
S aktualizovanými aplikacemi ASP.NET i ASP.NET Core je teď možné metody rozšíření použít k nastavení vzdáleného ověřování aplikací nebo vzdálené relace podle potřeby.
Povolení proxy serveru
Pokud chcete umožnit proxy komunikaci z aplikace ASP.NET Core do aplikace ASP.NET Framework, můžete nastavit náhradní trasu, která předá nepřiřazené požadavky starší aplikaci. To umožňuje postupnou migraci, kdy aplikace ASP.NET Core zpracovává migrované funkce při návratu do původní aplikace pro nemigrované funkce.
Nainstalujte balíček NuGet YARP (ještě další reverzní proxy server) podle nejnovějších pokynů.
Přidejte požadované příkazy using do
Program.cs:using Microsoft.Extensions.Options; using Microsoft.AspNetCore.SystemWebAdapters;Zaregistrujte služby reverzního proxy serveru ve vaší službě
Program.cs:builder.Services.AddReverseProxy();Po sestavení aplikace a konfiguraci dalšího middlewaru přidejte mapování náhradní trasy:
var app = builder.Build(); // Configure your other middleware here (authentication, routing, etc.) // Map the fallback route app.MapForwarder("/{**catch-all}", app.Services.GetRequiredService<IOptions<RemoteAppClientOptions>>().Value.RemoteAppUrl.OriginalString) // Ensures this route has the lowest priority (runs last) .WithOrder(int.MaxValue) // Skips remaining middleware when this route matches .ShortCircuit(); app.Run();
Nastavení orchestrace Aspire
Důležité
Tato možnost je stále ve verzi Preview a není dostupná na NuGet.org, takže je nutné nakonfigurovat konfiguraci NuGetu tak, aby načítá knihovny z denního kanálu knihoven .NET:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<!--To inherit the global NuGet package sources remove the <clear/> line below -->
<clear />
<add key="nuget" value="https://api.nuget.org/v3/index.json" />
<add key=".NET Libraries Daily" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-libraries/nuget/v3/index.json" />
</packageSources>
</configuration>
POZNÁMKA: To vyžaduje verze 2.0.1-preview1.25351.5 adaptérů System.Web nebo novějších.
Výstraha
POZNÁMKA: Jedná se o komponentu třetí strany, která pomáhá spouštět aplikaci v Aspire. V současné době nejsou aplikace ASP.NET Framework podporovány přímo v Aspire, ale tento projekt s tím pomůže. Tato závislost je určená pro sestavení a vývoj, ale není nutné ji nasazovat do produkčního prostředí.
Přidejte Aspire orchestraci pro aplikaci ASP.NET Framework
Přidejte do řešení novou aplikaci ASP.NET Core a přidejte ji do Aspire orchestrace.
Aktualizace AppHost tak, aby cílila na Windows jako integraci služby IIS, vyžaduje následující:
- <TargetFramework>net9.0</TargetFramework> + <TargetFramework>net9.0-windows</TargetFramework>Přidejte do hostitele aplikace následující Aspire integrace:
Aspire.Hosting.IncrementalMigrationC3D.Extensions.Aspire.IISExpress
Nakonfigurujte službu IIS Express tak, aby místně hostovala aplikaci frameworku, a nakonfigurujte přírůstkovou migraci jako záložní řešení.
var builder = DistributedApplication.CreateBuilder(args); var frameworkApp = builder.AddIISExpress("iis") .AddSiteProject<Projects.FrameworkApplication>("framework") .WithDefaultIISExpressEndpoints() .WithOtlpExporter() .WithHttpHealthCheck(); var coreApp = builder.AddProject<Projects.CoreApplication>("core") .WithHttpHealthCheck() .WaitFor(frameworkApp) .WithIncrementalMigrationFallback(frameworkApp, options => options.RemoteSession = RemoteSession.Enabled); builder.Build().Run();Nakonfigurujte možnosti záložního přírůstkového přesunu pro scénáře, které chcete podporovat.
Konfigurace serviceDefaults pro podporu ASP.NET Framework
- Přidejte balíček
Aspire.Microsoft.AspNetCore.SystemWebAdaptersdo aplikace. - Aktualizujte projekt ServiceDefaults tak, aby podporoval rozhraní .NET Framework. Toto je založeno na výchozím nastavení služby ServiceDefaults a může se lišit, pokud jste provedli nějaké úpravy.
Aktualizujte cílovou architekturu na multitarget:
- <TargetFramework>net9.0</TargetFramework> + <TargetFrameworks>net9.0;net48</TargetFrameworks>Aktualizujte PackageReferences tak, aby zohlednily různé architektury:
<ItemGroup> <PackageReference Include="Microsoft.Extensions.Http.Resilience" /> <PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" /> <PackageReference Include="OpenTelemetry.Extensions.Hosting" /> <PackageReference Include="OpenTelemetry.Instrumentation.Http" /> <PackageReference Include="OpenTelemetry.Instrumentation.Runtime" /> <PackageReference Include="OpenTelemetry.Instrumentation.SqlClient" /> </ItemGroup> <ItemGroup Condition=" '$(TargetFramework)' == 'net9.0'"> <FrameworkReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.Extensions.ServiceDiscovery" /> <PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" /> </ItemGroup> <ItemGroup Condition=" '$(TargetFramework)' == 'net48' "> <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" /> <PackageReference Include="OpenTelemetry.Instrumentation.AspNet" /> </ItemGroup>V souboru Extensions.cs budete muset podmíněně vyloučit rozhraní API ServiceDiscovery, protože v rozhraní .NET Framework se v současné době nepodporují:
+ #if NET builder.Services.AddServiceDiscovery(); + #endif builder.Services.ConfigureHttpClientDefaults(http => { // Turn on resilience by default http.AddStandardResilienceHandler(); + #if NET // Turn on service discovery by default http.AddServiceDiscovery(); + #endif });Pokud chcete povolit telemetrii, aktualizujte metriky a trasování registrací:
builder.Services.AddOpenTelemetry() .WithMetrics(metrics => { metrics + #if NET .AddAspNetCoreInstrumentation() + #else + .AddAspNetInstrumentation() + #endif .AddSqlClientInstrumentation() .AddHttpClientInstrumentation() .AddRuntimeInstrumentation(); }) .WithTracing(tracing => { tracing.AddSource(builder.Environment.ApplicationName) + #if NET .AddAspNetCoreInstrumentation() + #else + .AddAspNetInstrumentation() + #endif .AddSqlClientInstrumentation() .AddHttpClientInstrumentation(); });Zakažte výchozí koncové body, jelikož tyto se vztahují pouze na ASP.NET Core.
+ #if NET public static WebApplication MapDefaultEndpoints(this WebApplication app) { // Default endpoint registrations } + #endif
Konfigurace aplikace ASP.NET Framework
Odkaz na projekt ServiceDefaults
Do metody v
Application_Startsouboru přidejte konfigurační kódGlobal.asax.cs:protected void Application_Start() { HttpApplicationHost.RegisterHost(builder => { builder.AddServiceDefaults(); builder.AddSystemWebAdapters(); }); }
Konfigurace aplikace ASP.NET Core
Odkaz na projekt ServiceDefaults
Přidejte adaptéry System.Web v Programs.cs:
var builder = WebApplication.CreateBuilder(); builder.AddServiceDefaults(); + builder.AddSystemWebAdapters(); ... var app = builder.Build(); ... + // Must be placed after routing if manually added + app.UseSystemWebAdapters(); ... + app.MapRemoteAppFallback() + + // Optional, but recommended unless middleware is needed + .ShortCircuit(); app.Run();
S touto konfigurací:
- Místní trasy mají přednost: Pokud má aplikace ASP.NET Core odpovídající trasu, zpracuje požadavek místně.
- Přechod na starší aplikaci: Neodpovídající požadavky jsou automaticky předány do aplikace ASP.NET framework.
-
Optimalizace middlewaru: Metoda
.ShortCircuit()zabraňuje zbytečnému spuštění middlewaru při předávání požadavků.
Toto nastavení umožňuje bezproblémové uživatelské prostředí během přírůstkové migrace, kde mají uživatelé přístup k migrovaným i starším funkcím prostřednictvím jednoho koncového bodu.