Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu kılavuzda, Bir Azure DocumentDB kümesine bağlanmak için bir .NET konsol uygulamasının nasıl derlenmesi gösterilmektedir. Geliştirme ortamınızı ayarlar, kimlik doğrulaması yapmak için .NET için Azure SDK kitaplığını kullanır Azure.Identity ve belgeleri oluşturmak, sorgulamak ve güncelleştirmek için veritabanıyla etkileşim kurarsınız.
Prerequisites
Azure aboneliği
- Azure aboneliğiniz yoksa ücretsiz bir hesap oluşturun
Mevcut bir Azure DocumentDB kümesi
- Kümeniz yoksa yeni bir küme oluşturun
Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz. Azure Cloud Shell'i kullanmaya başlama.
CLI referans komutlarını yerel olarak çalıştırmayı tercih ediyorsanız, Azure CLI'yi yükleyin. Windows veya macOS üzerinde çalışıyorsanız, Azure CLI'yi bir Docker konteynerinde çalıştırmayı düşünün. Daha fazla bilgi için Azure CLI'nin bir Docker konteynerında nasıl çalıştırılacağını inceleyin.
Yerel bir kurulum kullanıyorsanız, az login komutunu kullanarak Azure CLI'ye giriş yapın. Kimlik doğrulama işlemini tamamlamak için, terminalinizde görüntülenen adımları takip edin. Diğer oturum açma seçenekleri için bkz. Azure CLI kullanarak Azure'da kimlik doğrulaması.
İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma ve yönetme.
Yüklü olan sürümü ve bağımlı kütüphaneleri bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
Kimlik verilen
rootrolünüzle küme için yapılandırılan Microsoft Entra kimlik doğrulaması.- Microsoft Entra kimlik doğrulamasını etkinleştirmek için yapılandırma kılavuzunu gözden geçirin.
Microsoft Entra kiracı meta verilerini alma
İçindeki TokenCredential sınıfını Azure.Identity kullanarak bir erişim belirteci almak için, Microsoft Entra kiracısının benzersiz kimliğine ihtiyacınız vardır. Bu önkoşul adımında, değeri almak ve kaydetmek için Azure CLI'yi tenantId kullanın.
<şu anda oturum açmış durumda olan Azure aboneliğinin ayrıntılarını
kullanarak alın.> az account showkomutu, çeşitli alanları içeren bir JSON yanıtı oluşturur.
{ "environmentName": "AzureCloud", "homeTenantId": "eeeeffff-4444-aaaa-5555-bbbb6666cccc", "id": "dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b", "isDefault": true, "managedByTenants": [], "name": "example-azure-subscription", "state": "Enabled", "tenantId": "eeeeffff-4444-aaaa-5555-bbbb6666cccc", "user": { "cloudShellID": true, "name": "kai@adventure-works.com", "type": "user" } }özelliğinin
tenantIddeğerini kaydedin. Bu özellik, Microsoft Entra kiracınız için benzersiz tanımlayıcıdır ve bazen kiracı kimliği olarak adlandırılır. Bu değeri sonraki bir bölümdeki adımlarda kullanacaksınız.
Konsol uygulamanızı yapılandırma
Ardından, yeni bir konsol uygulaması projesi oluşturun ve kümenizde kimlik doğrulaması yapmak için gerekli kitaplıkları içeri aktarın.
Boş bir dizinde yeni bir .NET konsol uygulaması oluşturun.
dotnet new consoleAzure.IdentityPaketi NuGet'ten içeri aktarın.dotnet add package Azure.IdentityArdından paketi içeri aktarın
MongoDB.Driver.dotnet add package MongoDB.Driver.NET projesini oluşturma
dotnet build
Kümeye bağlanma
Şimdi kitaplığını Azure.IdentityTokenCredential kullanarak kümenize bağlanmak için bir kullanın. Resmi MongoDB sürücüsünün, kümeye bağlanırken kullanılmak üzere Microsoft Entra'dan belirteçleri almak için uygulanması gereken özel bir arabirimi vardır.
Program.cs dosyasında bu
Azure.IdentityveMongoDB.Driverad alanları için using blokları ekleyin.using Azure.Identity; using MongoDB.Driver;Ayrı bir dosyada,
MongoDB.Driver.Authentication.Oidc.IOidcCallbackarayüzünün tüm gerekli üyelerini uygulayan yeni bir sınıf oluşturun.using Azure.Core; using MongoDB.Driver.Authentication.Oidc; internal sealed class AzureIdentityTokenHandler( TokenCredential credential, string tenantId ) : IOidcCallback { private readonly string[] scopes = ["https://ossrdbms-aad.database.windows.net/.default"]; public OidcAccessToken GetOidcAccessToken(OidcCallbackParameters parameters, CancellationToken cancellationToken) { AccessToken token = credential.GetToken( new TokenRequestContext(scopes, tenantId: tenantId), cancellationToken ); return new OidcAccessToken(token.Token, token.ExpiresOn - DateTimeOffset.UtcNow); } public async Task<OidcAccessToken> GetOidcAccessTokenAsync(OidcCallbackParameters parameters, CancellationToken cancellationToken) { AccessToken token = await credential.GetTokenAsync( new TokenRequestContext(scopes, parentRequestId: null, tenantId: tenantId), cancellationToken ); return new OidcAccessToken(token.Token, token.ExpiresOn - DateTimeOffset.UtcNow); } }Tip
Bu sınıf, açıklayıcı amaçlarla olarak olarak adlandırılır
AzureIdentityTokenHandler. Bu sınıfa istediğiniz adı vekleyebilirsiniz. Bu kılavuzun geri kalanında sınıfınAzureIdentityTokenHandleradını taşıdığı varsayılır.Program.cs dosyasının düzenleyicisine geri dönün.
Mevcut kümenizin adıyla bir dize değişkeni oluşturun. Daha sonra,
MongoUrlkullanarak yeni birMongoUrl.Createtürü örneği oluşturmak için bu değişkeni kullanın.string clusterName = "<azure-documentdb-cluster-name>"; MongoUrl url = MongoUrl.Create($"mongodb+srv://{clusterName}.global.mongocluster.cosmos.azure.com/");Önceki adımlarda oluşturulan
MongoSettingskullanarak ve Azure DocumentDB'nin standart en iyi uygulama yapılandırmasına uygun olarak yeni birMongoUrlörneği yapılandırın.MongoClientSettings settings = MongoClientSettings.FromUrl(url); settings.UseTls = true; settings.RetryWrites = false; settings.MaxConnectionIdleTime = TimeSpan.FromMinutes(2);türünde
DefaultAzureCredentialyeni bir kimlik bilgisi oluşturun.DefaultAzureCredential credential = new();Tip
Burada, türünde
TokenCredentialherhangi bir kimlik bilgisi kullanabilirsiniz.DefaultAzureCredentialerken geliştirme senaryoları için en sorunsuz seçenektir.Sınıfınızı uygulayan ve bu kılavuzun önceki bölümlerinde kaydettiğiniz
IOidcCallbackile yapılandırılmış yeni bir örnek oluşturun.string tenantId = "<microsoft-entra-tenant-id>"; AzureIdentityTokenHandler tokenHandler = new(credential, tenantId);Özelleştirilmiş işleyici geri çağırma uygulamanızı
MongoCredential.CreateOidcCredentialkullanarak ayarlarınız için kimlik bilgilerini yapılandırın.settings.Credential = MongoCredential.CreateOidcCredential(tokenHandler);Ayarları dondurup yeni bir örneği
MongoClientoluşturun.settings.Freeze(); MongoClient client = new(settings); Console.WriteLine("Client created");
Yaygın işlemler gerçekleştirme
Son olarak veritabanları, koleksiyonlar ve belgelerle ortak görevleri gerçekleştirmek için resmi kitaplığı kullanın. Burada, koleksiyonlarınızı ve öğelerinizi yönetmek için MongoDB veya DocumentDB ile etkileşimde bulunurken kullandığınız sınıfları ve yöntemleri kullanırsınız.
Kendi dosyasında özel bir kayıt türü oluşturarak belgelerinizi temsil edin.
public record Product( string id, string category, string name, int quantity, decimal price, bool clearance );Tip
Bu yapı, açıklayıcı amaçlarla olarak olarak adlandırılır
Product. Bu kılavuzun geri kalanında bu yapının önceden tanımlanmış olduğu varsayılır.Program.cs dosyasına geri dönün.
Veritabanınıza bir işaretçi almak için
MongoClient.GetDatabasekullanın.string databaseName = "<database-name>"; IMongoDatabase database = client.GetDatabase(databaseName); Console.WriteLine("Database pointer created");Ardından,
IMongoDatabase.GetCollection<>kullanarak koleksiyonunuz için bir işaretçi alabilmek için veritabanı işaretçisini kullanın.string collectionName = "<collection-name>"; IMongoCollection<Product> collection = database.GetCollection<Product>(collectionName); Console.WriteLine("Collection pointer created");yöntemini kullanarak iki belge oluşturun ve
IMongoCollection<>.ReplaceOneAsync.Product classicSurfboard = new( id: "bbbbbbbb-1111-2222-3333-cccccccccccc", category: "gear-surf-surfboards", name: "Kiama Classic Surfboard", quantity: 25, price: 790.00m, clearance: false ); Product paddleKayak = new( id: "cccccccc-2222-3333-4444-dddddddddddd", category: "gear-paddle-kayaks", name: "Lastovichka Paddle Kayak", quantity: 10, price: 599.99m, clearance: true ); await collection.ReplaceOneAsync<Product>( doc => doc.id == classicSurfboard.id, classicSurfboard, new ReplaceOptions { IsUpsert = true } ); Console.WriteLine($"Upserted document:\t{classicSurfboard.id}"); await collection.ReplaceOneAsync<Product>( doc => doc.id == paddleKayak.id, paddleKayak, new ReplaceOptions { IsUpsert = true } ); Console.WriteLine($"Upserted document:\t{paddleKayak.id}");IMongoCollection<>.FindveIFindFluent<,>.SingleAsynckullanarak koleksiyondan tek bir belge okuyun. Bulmak istediğiniz belgeyi belirtmek için filtre kullanın.Product document = await collection.Find( doc => doc.id == "cccccccc-2222-3333-4444-dddddddddddd" ).SingleAsync(); Console.WriteLine($"Found document:\t{document.name}");Aynı
Findyöntemi kullanarak bir filtreyle eşleşen tüm belgeler için sorgu oluşturun. Belirli bir özelliği (örneğincategory) ve belirli bir değeri (örneğingear-surf-surfboards) tanımlamak için filtre kullanın. kullanarakIFindFluent<,>.ToListAsyncsonuçları numaralandırın.List<Product> documents = await collection.Find( doc => doc.category == "gear-surf-surfboards" ).ToListAsync(); foreach (Product doc in documents) { Console.WriteLine($"Queried document:\t{doc}"); }Belirli bir belgeyi,
IMongoCollection<>.DeleteOneAsyncve bir filtre kullanarak koleksiyondan silin.await collection.DeleteOneAsync( doc => doc.id == "bbbbbbbb-1111-2222-3333-cccccccccccc" ); Console.WriteLine($"Deleted document");Projedeki tüm kod dosyalarını kaydedin.
Projeyi
dotnet runkullanarak çalıştırdotnet runÇalışan uygulamanın çıkışını gözlemleyin.
Client created Database pointer created Collection pointer created Upserted document: bbbbbbbb-1111-2222-3333-cccccccccccc Upserted document: cccccccc-2222-3333-4444-dddddddddddd Found document: Lastovichka Paddle Kayak Queried document: Product { id = bbbbbbbb-1111-2222-3333-cccccccccccc, category = gear-surf-surfboards, name = Kiama Classic Surfboard, quantity = 25, price = 790.00, clearance = False } Deleted document