Aracılığıyla paylaş


.NET .NET Aspire iç döngü ağına genel bakış

.NET .NET Aspire ile geliştirmenin avantajlarından biri, yerel bulutta yerel uygulamalar geliştirmenize, test edip hatalarını ayıklamanıza olanak tanımasıdır. İç döngü ağı, .NET.NET Aspire uygulamalarınızın geliştirme ortamınızda birbirleriyle iletişim kurmasını sağlayan önemli bir yönüdür. Bu makalede, .NET.NET Aspire proxy'ler, uç noktalar, uç nokta yapılandırmaları ve başlatma profilleri ile çeşitli ağ senaryolarını nasıl işlediğini öğreneceksiniz.

İç döngüde ağ oluşturma

İç döngü, uygulamanızı hedef ortama dağıtmadan önce yerel olarak geliştirme ve test etme işlemidir. .NET .NET Aspire, iç döngüdeki ağ deneyimini basitleştirmek ve geliştirmek için aşağıdakiler gibi çeşitli araçlar ve özellikler sağlar:

  • Başlatma profilleri: Başlatma profilleri, uygulamanızın yerel olarak nasıl çalıştırılacağını belirten yapılandırma dosyalarıdır. Uygulamanızın uç noktalarını, ortam değişkenlerini ve başlatma ayarlarını tanımlamak için başlatma profillerini (launchSettings.json dosyası gibi) kullanabilirsiniz.
  • Kestrel yapılandırması: Kestrel yapılandırması, Kestrel web sunucusunun dinlediği uç noktaları belirtmenize olanak tanır. Uygulama ayarlarınızda Kestrel uç noktalarını yapılandırabilir ve .NET.NET Aspire uç noktaları oluşturmak için otomatik olarak bu ayarları kullanır.
  • uç noktalar/uç nokta yapılandırmaları: Uç noktalar, uygulamanızla bağlı olduğu hizmetler (veritabanları, ileti kuyrukları veya API'ler gibi) arasındaki bağlantılardır. Uç noktalar hizmet adı, konak bağlantı noktası, şema ve ortam değişkeni gibi bilgiler sağlar. Uygulamanıza örtük olarak (başlatma profilleri aracılığıyla) veya açıkça WithEndpointçağırarak uç noktalar ekleyebilirsiniz.
  • Proxy'ler: .NET.NET Aspire, uygulamanıza eklediğiniz her hizmet bağlantısı için otomatik olarak bir ara sunucu başlatır ve ara sunucunun dinleyeceği bağlantı noktasını atar. Proxy daha sonra istekleri uygulamanızın dinlediği bağlantı noktasına iletir ve bu da proxy bağlantı noktasından farklı olabilir. Bu şekilde, bağlantı noktası çakışmalarını önleyebilir, tutarlı ve öngörülebilir URL'leri kullanarak uygulamanıza ve hizmetlerinize erişebilirsiniz.

Uç noktalar nasıl çalışır?

hizmet bağlaması iki tümleştirme içerir: uygulamanızın gerektirdiği dış kaynağı temsil eden bir hizmeti (örneğin, veritabanı, ileti kuyruğu veya API) ve uygulamanızla hizmet arasında bağlantı kuran ve gerekli bilgileri sağlayan bağlama.

iki hizmet bağlama türünü destekler: örtük, farklı ortamlarda uygulama davranışını tanımlayan belirtilen başlatma profillerini temel alarak otomatik olarak oluşturulur ve kullanılarak el ile oluşturulan açık.

Örtük veya açık bir bağlama oluşturduktan sonra .NET.NET Aspire, uygulamanızdan hizmete gelen istekler için yönlendirme ve yük dengelemeyi işleyerek belirli bir bağlantı noktasında basit bir ters ara sunucu başlatır. Ara sunucu, yapılandırma veya yönetim endişesi gerektirmeyen bir .NET.NET Aspire uygulama ayrıntısıdır.

Uç noktaların nasıl çalıştığını görselleştirmeye yardımcı olmak için .NET.NET Aspire başlangıç şablonları iç döngü ağ diyagramını göz önünde bulundurun:

Başlangıç Uygulaması şablonu iç döngü ağ diyagramı. .NET.NET Aspire

Profilleri başlatma

AddProjectçağırdığınızda, uygulama ana bilgisayarı varsayılan uç nokta kümesini belirlemek için Özellikler/launchSettings.json arar. Uygulama konağı aşağıdaki kuralları kullanarak belirli bir başlatma profilini seçer:

  1. launchProfileNameçağrılırken açık bir AddProject bağımsız değişkeni geçirildi.
  2. DOTNET_LAUNCH_PROFILE ortam değişkeni. Daha fazla bilgi için bkz.ortam değişkenlerini .
  3. İlk başlatma profili launchSettings.jsoniçinde tanımlandı.

Aşağıdaki launchSettings.json dosyasını göz önünde bulundurun:

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": false,
      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
      "applicationUrl": "https://localhost:7239;http://localhost:5066",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

Bu makalenin geri kalanında, IDistributedApplicationBuilder API'siyle builder adlı bir değişkene atanmış bir CreateBuilder() oluşturduğunuzu düşünün:

var builder = DistributedApplication.CreateBuilder(args);

http ve https başlatma profillerini belirtmek için her ikisi için de launchSettings.json dosyasındaki applicationUrl değerlerini yapılandırın. Bu URL'ler bu proje için uç noktalar oluşturmak için kullanılır. Bu, şunun eşdeğeridir:

builder.AddProject<Projects.Networking_Frontend>("frontend")
       .WithHttpEndpoint(port: 5066)
       .WithHttpsEndpoint(port: 7239);

Önemli

launchSettings.json (veya başlatma profili) yoksa varsayılan olarak bağlama yoktur.

Daha fazla bilgi için bkz. .NET.NET Aspire ve başlatma profilleri.

Kestrel tarafından yapılandırılmış uç noktalar

.NET .NET Aspire Kestrel uç nokta yapılandırmasını destekler. Örneğin, HTTPS şeması ve bağlantı noktası 5271 ile Kestrel uç noktasını tanımlayan bir proje için appsettings.json dosyası düşünün:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://*:5271"
      }
    }
  }
}

Yukarıdaki yapılandırma bir Https uç noktası belirtir. Url özelliği https://*:5271olarak ayarlanır. Bu, uç noktanın 5271 numaralı bağlantı noktasındaki tüm arabirimleri dinlediği anlamına gelir. Daha fazla bilgi için bkz. Kestrel web sunucusuiçin uç noktaları yapılandırma .

Kestrel uç noktası yapılandırıldığında, proje, yapılandırılmış her türlü applicationUrllaunchSettings.json dosyasından kaldırmalıdır.

Not

launchSettings.json dosyasında applicationUrl varsa ve Kestrel uç noktası yapılandırıldıysa, uygulama konağı bir hata fırlatır.

Proje kaynağı eklediğinizde, launchSettings.json dosyası yerine Kestrel uç noktasının kullanılması gerektiğini belirtmenize olanak tanıyan bir aşırı yükleme vardır:

builder.AddProject<Projects.Networking_ApiService>(
    name: "apiservice",
    configure: static project =>
    {
        project.ExcludeLaunchProfile = true;
        project.ExcludeKestrelEndpoints = false;
    })
    .WithHttpsEndpoint();

Daha fazla bilgi için bkz. AddProject.

Bağlantı noktaları ve proxy'ler

Hizmet bağlaması tanımlanırken, ana bilgisayar bağlantı noktası her zaman hizmetin önünde duran ara sunucuya verilir. Bu, bir hizmetin tek veya birden çok çoğaltmasının benzer şekilde davranmasını sağlar. Ayrıca, WithReference API'sini kullanan tüm kaynak bağımlılıkları ortam değişkeninden ara sunucu uç noktasını kullanır.

AddProject, WithHttpEndpointve ardından WithReplicasçağıran aşağıdaki yöntem zincirini göz önünde bulundurun:

builder.AddProject<Projects.Networking_Frontend>("frontend")
       .WithHttpEndpoint(port: 5066)
       .WithReplicas(2);

Yukarıdaki kod aşağıdaki ağ diyagramına neden olur:

.NET.NET Aspire ön uç uygulama ağ diyagramı, belirli bir ana bilgisayar bağlantı noktası ve iki çoğaltma ile.

Yukarıdaki diyagramda aşağıdakiler gösterilmiştir:

  • Uygulamaya giriş noktası olarak bir web tarayıcısı.
  • 5066 ana bilgisayar bağlantı noktası.
  • Web tarayıcısı ile ön uç hizmet kopyaları arasında duran ve 5066 numaralı bağlantı noktasını dinleyen ön uç proxy.
  • Rastgele atanan 65001 numaralı bağlantı noktasını dinleyen frontend_0 ön uç hizmeti kopyası.
  • Rastgele atanan 65002 numaralı bağlantı noktasını dinleyen frontend_1 ön uç hizmeti çoğaltması.

WithReplicasçağrısı olmadan yalnızca bir ön uç hizmeti vardır. Ara sunucu 5066 numaralı bağlantı noktasını dinlemeye devam eder, ancak ön uç hizmeti rastgele bir bağlantı noktasını dinler:

builder.AddProject<Projects.Networking_Frontend>("frontend")
       .WithHttpEndpoint(port: 5066);

tanımlanan iki bağlantı noktası vardır:

  • 5066 ana bilgisayar bağlantı noktası.
  • Altta çalışan hizmetin bağlanacağı rastgele bir proxy bağlantı noktası.

Belirli ana bilgisayar bağlantı noktası ve rastgele bağlantı noktasına sahip bir ön yüz uygulama ağı diyagramı .NET.NET Aspire.

Yukarıdaki diyagramda aşağıdakiler gösterilmiştir:

  • Uygulamaya giriş noktası olarak bir web tarayıcısı.
  • 5066 ana bilgisayar bağlantı noktası.
  • Web tarayıcısı ile ön uç hizmeti arasında duran ve 5066 numaralı bağlantı noktasını dinleyen ön uç proxy'si.
  • 65001'in rastgele bağlantı noktasını dinleyen ön uç hizmeti.

Altta yatan hizmet, proje kaynakları için bu bağlantı noktasını ASPNETCORE_URLS üzerinden alır. Diğer kaynaklar, hizmet bağlaması üzerinde bir ortam değişkeni belirterek bu bağlantı noktasına erişim sağlar:

builder.AddNpmApp("frontend", "../NodeFrontend", "watch")
       .WithHttpEndpoint(port: 5067, env: "PORT");

Önceki kod, rastgele bağlantı noktasını PORT ortam değişkeninde kullanılabilir hale getirir. Uygulama, proxy'den gelen bağlantıları dinlemek için bu bağlantı noktasını kullanır. Aşağıdaki diyagramı göz önünde bulundurun:

Ön uç uygulama için belirli bir ana bilgisayar bağlantı noktası ve ortam değişkeni bağlantı noktası içeren ağ diyagramı .NET.NET Aspire.

Yukarıdaki diyagramda aşağıdakiler gösterilmiştir:

  • Uygulamaya giriş noktası olarak bir web tarayıcısı.
  • 5067 numaralı ana bilgisayar bağlantı noktası.
  • Web tarayıcısı ile ön uç hizmeti arasında duran ve 5067 numaralı bağlantı noktasını dinleyen ön uç proxy'si.
  • 65001 ortamında dinleyen ön uç hizmeti.

Bahşiş

Uç noktanın çakışmasını önlemek için IsProxied uzantısı yöntemini çağırırken false özelliğini WithEndpoint olarak ayarlayın. Daha fazla bilgi için bkz. uç nokta uzantıları :dikkat edilmesi gereken ek noktalar.

Ana bilgisayar bağlantı noktasını atla

Konak bağlantı noktasını atladığınızda, .NET.NET Aspire hem ana bilgisayar hem de hizmet bağlantı noktaları için rastgele bir bağlantı noktası oluşturur. Bu, bağlantı noktası çakışmalarını önlemek istediğinizde ve konak veya hizmet bağlantı noktasıyla ilgilenmediğinizde kullanışlıdır. Aşağıdaki kodu göz önünde bulundurun:

builder.AddProject<Projects.Networking_Frontend>("frontend")
       .WithHttpEndpoint();

Bu senaryoda, aşağıdaki diyagramda gösterildiği gibi hem konak hem de hizmet bağlantı noktaları rastgeledir:

Ön uç uygulamanın ağ diyagramı, rastgele konak ve ara sunucu portlarıyla birlikte .NET.NET Aspire.

Yukarıdaki diyagramda aşağıdakiler gösterilmiştir:

  • Uygulamaya giriş noktası olarak bir web tarayıcısı.
  • 65000 rastgele bir konak bağlantı noktası.
  • Web tarayıcısı ile ön uç hizmeti arasında duran ve port 65000'i dinleyen frontend proxy'si.
  • 65001 rastgele bağlantı noktasında dinleyen ön uç hizmeti.

Konteyner limanları

Kapsayıcı kaynağı eklediğinizde, .NET.NET Aspire kapsayıcıya otomatik olarak rastgele bir bağlantı noktası atar. Kapsayıcı bağlantı noktası belirtmek için kapsayıcı kaynağını istediğiniz bağlantı noktasıyla yapılandırın:

builder.AddContainer("frontend", "mcr.microsoft.com/dotnet/samples", "aspnetapp")
       .WithHttpEndpoint(port: 8000, targetPort: 8080);

Önceki kod:

  • frontend görüntüsünden mcr.microsoft.com/dotnet/samples:aspnetappadlı bir kapsayıcı kaynağı oluşturur.
  • Konağı 8000 numaralı bağlantı noktasına bağlayıp kapsayıcının 8080 numaralı bağlantı noktasına eşleyerek bir http uç noktasını kullanıma sunar.

Aşağıdaki diyagramı göz önünde bulundurun:

Ön uç uygulama ağ diyagramı, bir Docker konağıyla birlikte .NET.NET Aspire.

Uç nokta uzantısı yöntemleri

IResourceWithEndpoints arabirimini uygulayan tüm kaynaklar WithEndpoint uzantı yöntemlerini kullanabilir. Bu uzantının çeşitli fazlalıkları vardır ve şemayı, kapsayıcı bağlantı noktasını, konak bağlantı noktasını, ortam değişkeni adını ve uç noktanın proxy üzerinden olup olmadığını belirtmenize olanak tanır.

Ayrıca, uç noktayı yapılandırmak için bir temsilci belirtmenize olanak tanıyan bir aşırı yükleme vardır. Bu, uç noktayı ortama veya diğer faktörlere göre yapılandırmanız gerektiğinde kullanışlıdır. Aşağıdaki kodu göz önünde bulundurun:

builder.AddProject<Projects.Networking_ApiService>("apiService")
       .WithEndpoint(
            endpointName: "admin",
            callback: static endpoint =>
       {
           endpoint.Port = 17003;
           endpoint.UriScheme = "http";
           endpoint.Transport = "http";
       });

Yukarıdaki kod, uç noktayı yapılandırmak için bir geri çağırma temsilcisi sağlar. Uç nokta admin olarak adlandırılır ve 17003 ana bilgisayar bağlantı noktasının yanı sıra http şemasını ve aktarımını kullanacak şekilde yapılandırılır. Tüketici bu uç noktayı adıyla referans alır, aşağıdaki AddHttpClient çağrısına dikkat edin:

builder.Services.AddHttpClient<WeatherApiClient>(
    client => client.BaseAddress = new Uri("http://_admin.apiservice"));

Uri, admin uç nokta adının başına _ sentinel eklenerek oluşturulur. Bu, admin kesiminin apiservice hizmetine ait uç nokta adı olduğunu belirten bir kuraldır. Daha fazla bilgi için bkz. .NET.NET Aspire hizmet bulma.

Dikkat edilmesi gereken ek noktalar

WithEndpoint yöntemi çağrıldığında, callback aşırı yüklemesi, tüketicinin uç noktanın birçok yönünü özelleştirmesine olanak tanıyan ham EndpointAnnotation'yi ortaya çıkarır.

AllocatedEndpoint özelliği, bir hizmet için uç noktayı almanıza veya ayarlamanıza olanak tanır. IsExternal ve IsProxied özellikleri uç noktanın nasıl yönetileceğini ve kullanıma sunulduğuna karar verir: IsExternal genel olarak erişilebilir olup olmadığını belirlerken, IsProxied dcp'nin bunu yönetmesini sağlar ve iç bağlantı noktası farklılıklarına ve çoğaltmaya olanak sağlar.

Bahşiş

Kendi ara sunucusunu çalıştıran bir dış yürütülebilir dosya barındırıyorsanız ve DCP'nin bağlantı noktasını zaten bağlaması nedeniyle bağlantı noktası bağlama sorunlarıyla karşılaşıyorsanız, IsProxied özelliğini falseolarak ayarlamayı deneyin. Bu, DCP'nin proxy'yi yönetmesini engelleyerek yürütülebilir dosyanızın bağlantı noktasını başarıyla bağlamasına olanak sağlar.

Name özelliği hizmeti tanımlarken, Port ve TargetPort özellikleri sırasıyla istenen ve dinleyen bağlantı noktalarını belirtir.

Ağ iletişimi için, Protocol özelliği TCP ve UDPdestekler ve Transport özelliği aktarım protokolünü (HTTP, HTTP2, HTTP3) gösterir. Son olarak, hizmet URI ile adreslenebilirse, UriScheme özelliği hizmet URI'sini oluşturmak için URI şemasını sağlar.

Daha fazla bilgi için, EndpointAnnotation özelliklerinin mevcut ayrıntılarına bakınız.

Uç nokta filtreleme

Tüm .NET.NET Aspire proje kaynak uç noktaları bir dizi varsayılan sezgisel kuralı izler. Bazı uç noktalar çalışma zamanında ASPNETCORE_URLS'a eklenir, bazıları HTTP/HTTPS_PORTSolarak yayımlanır ve bazı yapılandırmalar Kestrel yapılandırmasına göre çözümlenir. Varsayılan davranıştan bağımsız olarak, WithEndpointsInEnvironment uzantısı yöntemini kullanarak ortam değişkenlerine dahil edilen uç noktaları filtreleyebilirsiniz:

builder.AddProject<Projects.Networking_ApiService>("apiservice")
    .WithHttpsEndpoint() // Adds a default "https" endpoint
    .WithHttpsEndpoint(port: 19227, name: "admin")
    .WithEndpointsInEnvironment(
        filter: static endpoint =>
        {
            return endpoint.Name is not "admin";
        });

Yukarıdaki kod, varsayılan bir HTTPS uç noktasının yanı sıra 19227 numaralı bağlantı noktasında bir admin uç noktası ekler. Ancak, admin uç noktası ortam değişkenlerinin dışında tutulur. Bu, bir uç noktayı yalnızca iç kullanım için kullanıma açmak istediğinizde kullanışlıdır.