.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?
Ö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ı.
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:
-
launchProfileName
çağrılırken açık birAddProject
bağımsız değişkeni geçirildi. -
DOTNET_LAUNCH_PROFILE
ortam değişkeni. Daha fazla bilgi için bkz.ortam değişkenlerini. - İ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://*:5271
olarak 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 uç noktası yapılandırıldığında, proje, yapılandırılmış her türlü applicationUrl
'ı launchSettings.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:
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ı
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ı
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
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ündenmcr.microsoft.com/dotnet/samples:aspnetapp
adlı 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
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 false
olarak 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_PORTS
olarak 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.
.NET Aspire