Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przewodniku pokazano, jak utworzyć aplikację konsolową platformy .NET w celu nawiązania połączenia z klastrem usługi Azure DocumentDB. Skonfiguruj środowisko programistyczne, użyj biblioteki Azure.Identity z zestawu Azure SDK dla platformy .NET do uwierzytelniania i współpracuj z bazą danych, aby tworzyć, wykonywać zapytania i aktualizować dokumenty.
Wymagania wstępne
Subskrypcja platformy Azure
- Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto
Istniejący klaster usługi Azure DocumentDB
- Jeśli nie masz klastra, utwórz nowy klaster
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj Azure CLI. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie Azure CLI w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić Azure CLI w kontenerze Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do Azure CLI za pomocą polecenia az login. Aby zakończyć proces uwierzytelniania, wykonaj kroki wyświetlane na Twoim terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Gdy zostaniesz o to poproszony/a, zainstaluj rozszerzenie Azure CLI przy pierwszym użyciu. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą interfejsu wiersza polecenia platformy Azure.
Uruchom az version, aby sprawdzić zainstalowaną wersję i biblioteki zależne. Aby zaktualizować do najnowszej wersji, uruchom az upgrade.
Uwierzytelnianie Microsoft Entra zostało skonfigurowane dla klastra z przypisaną rolą dla Twojej tożsamości
root.- Aby włączyć uwierzytelnianie firmy Microsoft Entra, zapoznaj się z przewodnikiem konfiguracji.
Najnowsza wersja platformy .NET.
Pobieranie metadanych dzierżawy Microsoft Entra
Aby pobrać token dostępu przy użyciu klasy TokenCredential w programie Azure.Identity, potrzebny jest unikatowy identyfikator dla tenant Microsoft Entra. W tym kroku wymagań wstępnych użyj interfejsu wiersza polecenia platformy Azure, aby pobrać i zarejestrować tenantId wartość.
Uzyskaj szczegółowe informacje dotyczące aktualnie zalogowanej subskrypcji platformy Azure przy użyciu polecenia
az account show.az account showPolecenie zwraca odpowiedź JSON zawierającą różne pola.
{ "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" } }Zapisz wartość
tenantIdwłaściwości. Ta właściwość jest unikatowym identyfikatorem dzierżawcy Microsoft Entra i czasami jest nazywana identyfikatorem dzierżawcy. Ta wartość jest używana w ramach kroków w następnej sekcji.
Konfigurowanie aplikacji konsolowej
Następnie utwórz nowy projekt aplikacji konsolowej i zaimportuj niezbędne biblioteki do uwierzytelniania w klastrze.
W pustym katalogu utwórz nową aplikację konsolową platformy .NET.
dotnet new consoleZaimportuj
Azure.Identitypakiet z pakietu NuGet.dotnet add package Azure.IdentityNastępnie zaimportuj
MongoDB.Driverpakiet.dotnet add package MongoDB.DriverKompilowanie projektu platformy .NET
dotnet build
Połącz się z klastrem
Teraz użyj biblioteki Azure.Identity, aby uzyskać TokenCredential, którego możesz użyć do połączenia się z klastrem. Oficjalny sterownik bazy danych MongoDB ma specjalny interfejs, który należy zaimplementować w celu uzyskania tokenów z firmy Microsoft Entra do użycia podczas nawiązywania połączenia z klastrem.
W pliku Program.cs dodaj bloki dla tych
Azure.IdentityiMongoDB.Driverprzestrzeni nazw.using Azure.Identity; using MongoDB.Driver;Utwórz nową klasę w osobnym pliku, która implementuje wszystkich wymaganych członków interfejsu
MongoDB.Driver.Authentication.Oidc.IOidcCallback.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); } }Wskazówka
W celach ilustracyjnych ta klasa nosi nazwę
AzureIdentityTokenHandler. Możesz nazwać tę klasę wszystkim, co chcesz. W pozostałej części tego przewodnika założono, że klasa nosi nazwęAzureIdentityTokenHandler.Wróć do edytora dla pliku Program.cs .
Utwórz zmienną ciągu o nazwie istniejącego klastra. Następnie użyj tej zmiennej, aby utworzyć nowe wystąpienie typu
MongoUrlprzy użyciu poleceniaMongoUrl.Createstring clusterName = "<azure-documentdb-cluster-name>"; MongoUrl url = MongoUrl.Create($"mongodb+srv://{clusterName}.global.mongocluster.cosmos.azure.com/");Skonfiguruj nowe
MongoSettingswystąpienie przy użyciuMongoUrl, które utworzono w poprzednich krokach, oraz standardowej konfiguracji najlepszych praktyk dla usługi Azure DocumentDB.MongoClientSettings settings = MongoClientSettings.FromUrl(url); settings.UseTls = true; settings.RetryWrites = false; settings.MaxConnectionIdleTime = TimeSpan.FromMinutes(2);Utwórz nowe poświadczenie typu
DefaultAzureCredential.DefaultAzureCredential credential = new();Wskazówka
W tym miejscu możesz użyć dowolnego poświadczenia typu
TokenCredential.DefaultAzureCredentialjest najbardziej bezproblemową opcją dla scenariuszy wczesnego programowania.Utwórz nowe wystąpienie swojej klasy, które implementuje
IOidcCallbacki skonfiguruj je za pomocą identyfikatora dzierżawy, który zanotowałeś wcześniej w tym przewodniku.string tenantId = "<microsoft-entra-tenant-id>"; AzureIdentityTokenHandler tokenHandler = new(credential, tenantId);Skonfiguruj poświadczenia dla swoich ustawień za pomocą
MongoCredential.CreateOidcCredentiali przekazując własną implementację funkcji callback programu obsługi.settings.Credential = MongoCredential.CreateOidcCredential(tokenHandler);Zablokuj ustawienia, a następnie utwórz nową instancję
MongoClient.settings.Freeze(); MongoClient client = new(settings); Console.WriteLine("Client created");
Wykonywanie typowych operacji
Na koniec użyj oficjalnej biblioteki do wykonywania typowych zadań z bazami danych, kolekcjami i dokumentami. W tym miejscu użyjesz tych samych klas i metod, których należy użyć do interakcji z bazą danych MongoDB lub DocumentDB w celu zarządzania kolekcjami i elementami.
Przedstaw swoje dokumenty, tworząc niestandardowy typ rekordu we własnym pliku.
public record Product( string id, string category, string name, int quantity, decimal price, bool clearance );Wskazówka
W celach ilustracyjnych ta struktura nosi nazwę
Product. W pozostałej części tego przewodnika założono, że ta struktura jest już zdefiniowana.Wróć do pliku Program.cs .
Uzyskaj wskaźnik do swojej bazy danych przy użyciu
MongoClient.GetDatabase.string databaseName = "<database-name>"; IMongoDatabase database = client.GetDatabase(databaseName); Console.WriteLine("Database pointer created");Następnie użyj wskaźnika bazy danych, aby uzyskać wskaźnik do kolekcji używając
IMongoDatabase.GetCollection<>.string collectionName = "<collection-name>"; IMongoCollection<Product> collection = database.GetCollection<Product>(collectionName); Console.WriteLine("Collection pointer created");Utwórz i zaktualizuj lub wstaw dwa dokumenty przy użyciu metody
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}");Odczytywanie pojedynczego dokumentu z kolekcji przy użyciu elementów
IMongoCollection<>.FindiIFindFluent<,>.SingleAsync. Użyj filtru, aby określić konkretny dokument, który chcesz znaleźć.Product document = await collection.Find( doc => doc.id == "cccccccc-2222-3333-4444-dddddddddddd" ).SingleAsync(); Console.WriteLine($"Found document:\t{document.name}");Wykonaj zapytanie o wszystkie dokumenty zgodne z filtrem przy użyciu tej samej
Findmetody. Użyj filtru, aby zdefiniować określoną właściwość (na przykładcategory) i określoną wartość (na przykładgear-surf-surfboards). Wyliczanie wyników przy użyciu poleceniaIFindFluent<,>.ToListAsync.List<Product> documents = await collection.Find( doc => doc.category == "gear-surf-surfboards" ).ToListAsync(); foreach (Product doc in documents) { Console.WriteLine($"Queried document:\t{doc}"); }Usuń określony dokument z kolekcji, korzystając z
IMongoCollection<>.DeleteOneAsynci filtra.await collection.DeleteOneAsync( doc => doc.id == "bbbbbbbb-1111-2222-3333-cccccccccccc" ); Console.WriteLine($"Deleted document");Zapisz wszystkie pliki kodu w projekcie.
Uruchamianie projektu przy użyciu polecenia
dotnet rundotnet runObserwuj dane wyjściowe uruchomionej aplikacji.
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