Bagikan melalui


integrasi .NET AspireSQL Server

Meliputi:integrasi Hosting dan Client integrasi

SQL Server adalah sistem manajemen database relasional yang dikembangkan oleh Microsoft. Integrasi .NET AspireSQL Server memungkinkan Anda terhubung ke instans SQL Server yang ada atau membuat instans baru dari .NET dengan gambar kontainer mcr.microsoft.com/mssql/server.

Integrasi hosting

Integrasi hosting SQL Server memodelkan server sebagai jenis SqlServerServerResource dan database sebagai jenis SqlServerDatabaseResource. Untuk mengakses jenis dan API ini, tambahkan paket NuGet 📦Aspire.Hosting.SqlServer dalam proyek host aplikasi .

dotnet add package Aspire.Hosting.SqlServer

Untuk informasi selengkapnya, lihat dotnet menambahkan paket atau Mengelola dependensi paket di aplikasi .NET.

Menambahkan sumber daya SQL Server dan sumber daya database

Di proyek host aplikasi Anda, panggil AddSqlServer untuk menambahkan dan mengembalikan pembangun sumber daya SQL Server. Rantai panggilan ke pembangun sumber daya yang dikembalikan ke AddDatabase, untuk menambahkan sumber daya database SQL Server.

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .WithLifetime(ContainerLifetime.Persistent);

var db = sql.AddDatabase("database");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(db)
       .WaitFor(db);

// After adding all resources, run the app...

Nota

Kontainer SQL Server lambat untuk memulai, jadi yang terbaik adalah menggunakan persisten siklus hidup untuk menghindari pengulangan yang tidak perlu. Untuk informasi selengkapnya, lihat masa keberlangsungan sumber daya kontainer.

Saat .NET.NET Aspire menambahkan gambar kontainer ke host aplikasi, seperti yang ditunjukkan dalam contoh sebelumnya dengan gambar mcr.microsoft.com/mssql/server, gambar tersebut membuat instans SQL Server baru di komputer lokal Anda. Referensi ke penyusun sumber daya SQL Server Anda (variabel sql) digunakan untuk menambahkan database. Database diberi nama database lalu ditambahkan ke ExampleProject. Sumber daya SQL Server mencakup kredensial default dengan username dari sa dan password yang dihasilkan secara acak menggunakan metode CreateDefaultPasswordParameter.

Saat host aplikasi berjalan, kata sandi disimpan di penyimpanan rahasia host aplikasi. Ini ditambahkan ke bagian Parameters, misalnya:

{
  "Parameters:sql-password": "<THE_GENERATED_PASSWORD>"
}

Nama parameter adalah sql-password, namun sebenarnya hanya memformat nama sumber dengan akhiran -password. Untuk informasi selengkapnya, lihat penyimpanan rahasia aplikasi secara aman selama pengembangan di ASP.NET Core dan tambahkan sumber daya SQL Server dengan parameter.

Metode WithReference mengonfigurasi koneksi di ExampleProject bernama database.

Saran

Jika Anda lebih suka menyambungkan ke SQL Serveryang sudah ada, panggil AddConnectionString sebagai gantinya. Untuk informasi selengkapnya, lihat referensi sumber daya yang sudah ada di .

Tambahkan sumber daya SQL Server dengan volume data

Untuk menambahkan volume data ke sumber daya SQL Server, panggil metode WithDataVolume pada sumber daya SQL Server:

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .WithDataVolume();

var db = sql.AddDatabase("database");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(db)
       .WaitFor(db);

// After adding all resources, run the app...

Volume data digunakan untuk mempertahankan data SQL Server di luar siklus hidup kontainernya. Volume data dipasang di jalur /var/opt/mssql di kontainer SQL Server dan ketika parameter name tidak disediakan, nama dihasilkan secara acak. Untuk informasi selengkapnya tentang volume data dan detail tentang mengapa mereka lebih disukai daripada pemasangan ikat , lihat dokumen Docker: Volume.

Peringatan

Kata sandi disimpan dalam volume data. Saat menggunakan volume data dan jika kata sandi berubah, itu tidak akan berfungsi sampai Anda menghapus volume.

Menambahkan sumber daya SQL Server dengan pemasangan ikatan data

Untuk menambahkan pemasangan ikatan data ke sumber daya SQL Server, panggil metode WithDataBindMount:

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .WithDataBindMount(source: @"C:\SqlServer\Data");

var db = sql.AddDatabase("database");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(db)
       .WaitFor(db);

// After adding all resources, run the app...

Penting

Pemasangan ikat data memiliki fungsionalitas terbatas dibandingkan dengan volume , yang menawarkan performa, portabilitas, dan keamanan yang lebih baik, membuatnya lebih cocok untuk lingkungan produksi. Namun, bind mount memungkinkan akses langsung dan modifikasi file pada sistem host, yang ideal untuk pengembangan dan pengujian ketika perubahan secara real-time diperlukan.

Mount bind data mengandalkan sistem file pada mesin host untuk mempertahankan data SQL Server selama restart kontainer. Pemasangan ikatan data dipasang di C:\SqlServer\Data pada jalur Windows (atau /SqlServer/Data pada Unix) pada komputer host di kontainer SQL Server. Untuk informasi lebih lanjut tentang data bind mounts, merujuk pada dokumen Docker: Bind mounts.

Tambahkan sumber daya SQL Server dengan parameter

Ketika Anda ingin secara eksplisit memberikan kata sandi yang digunakan oleh gambar kontainer, Anda dapat memberikan kredensial ini sebagai parameter. Pertimbangkan contoh alternatif berikut:

var builder = DistributedApplication.CreateBuilder(args);

var password = builder.AddParameter("password", secret: true);

var sql = builder.AddSqlServer("sql", password);
var db = sql.AddDatabase("database");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(db)
       .WaitFor(db);

// After adding all resources, run the app...

Untuk informasi selengkapnya tentang menyediakan parameter, lihat Parameter eksternal.

Menyambungkan ke sumber daya database

Saat host aplikasi .NET.NET Aspire berjalan, sumber daya database server dapat diakses dari alat eksternal, seperti SQL Server Management Studio (SSMS) atau Azure Data Studio. String koneksi untuk sumber daya database tersedia di variabel lingkungan sumber daya yang bergantung dan diakses menggunakan papan kendali .NET.NET Aspire: Jendela detail sumber daya. Variabel lingkungan diberi nama ConnectionStrings__{name} di mana {name} adalah nama sumber daya database, dalam contoh ini database. Gunakan string koneksi untuk menyambungkan ke sumber daya database dari alat eksternal. Bayangkan Anda memiliki database bernama todos dengan satu tabel dbo.Todos.

Untuk menyambungkan ke sumber daya database dari SQL Server Management Studio, ikuti langkah-langkah berikut:

  1. Buka SSMS.

  2. Dalam dialog Sambungkan ke Server, pilih tab Parameter Koneksi Tambahan.

  3. Tempelkan string koneksi ke bidang Parameter Koneksi Tambahan dan pilih Sambungkan.

    SQL Server Management Studio: Sambungkan ke dialog Server.

  4. Jika tersambung, Anda dapat melihat sumber daya database di Object Explorer:

    SQL Server Management Studio: Tersambung ke database.

Untuk informasi selengkapnya, lihat SQL Server Management Studio: Menyambungkan ke server.

Melakukan pemeriksaan kesehatan integrasi

Integrasi hosting SQL Server secara otomatis menambahkan pemeriksaan kesehatan untuk sumber daya SQL Server. Pemeriksaan kesehatan memverifikasi bahwa SQL Server berfungsi dan bahwa koneksi dapat dilakukan ke sana.

Integrasi hosting bergantung pada paket 📦 AspNetCore.HealthChecks.SqlServer NuGet.

Client integrasi

Untuk mulai menggunakan integrasi klien .NET AspireSQL Server, instal paket NuGet 📦Aspire.Microsoft.Data.SqlClient dalam proyek yang menggunakan klien, yaitu proyek aplikasi yang menggunakan klien SQL Server. Integrasi klien SQL Server mendaftarkan instans SqlConnection yang dapat Anda gunakan untuk berinteraksi dengan SQL Server.

dotnet add package Aspire.Microsoft.Data.SqlClient

Menambahkan klien SQL Server

Dalam file Program.cs proyek yang menggunakan klien Anda, panggil metode ekstensi AddSqlServerClient pada IHostApplicationBuilder apa pun untuk mendaftarkan SqlConnection untuk digunakan melalui wadah injeksi dependensi. Metode ini mengambil parameter nama koneksi.

builder.AddSqlServerClient(connectionName: "database");

Saran

Parameter connectionName harus cocok dengan nama yang digunakan saat menambahkan sumber daya database SQL Server dalam proyek host aplikasi. Dengan kata lain, ketika Anda memanggil AddDatabase dan memberikan nama database nama yang sama harus digunakan saat memanggil AddSqlServerClient. Untuk informasi selengkapnya, lihat Menambahkan sumber daya SQL Server dan sumber daya database.

Anda kemudian dapat mengambil instans SqlConnection melalui penerapan injeksi dependensi. Misalnya, untuk mengambil koneksi dari layanan contoh:

public class ExampleService(SqlConnection connection)
{
    // Use connection...
}

Untuk informasi selengkapnya tentang injeksi dependensi, lihat .NET injeksi dependensi.

Menambahkan klien SQL Server yang berbasis kunci

Mungkin ada situasi di mana Anda ingin mendaftarkan beberapa instans SqlConnection dengan nama koneksi yang berbeda. Untuk mendaftarkan klien kunci SQL Server, panggil metode AddKeyedSqlServerClient.

builder.AddKeyedSqlServerClient(name: "mainDb");
builder.AddKeyedSqlServerClient(name: "loggingDb");

Penting

Saat menggunakan layanan yang menggunakan kunci, diharapkan sumber daya SQL Server Anda mengonfigurasi dua database bernama, satu untuk mainDb dan satu untuk loggingDb.

Kemudian Anda dapat mengambil instance SqlConnection dengan menggunakan injeksi dependensi. Misalnya, untuk mengambil koneksi dari layanan contoh:

public class ExampleService(
    [FromKeyedServices("mainDb")] SqlConnection mainDbConnection,
    [FromKeyedServices("loggingDb")] SqlConnection loggingDbConnection)
{
    // Use connections...
}

Untuk informasi selengkapnya tentang layanan dengan kunci, lihat .NET injeksi dependensi: Layanan dengan kunci.

Konfigurasi

Integrasi .NET AspireSQL Server menyediakan beberapa opsi untuk mengonfigurasi koneksi berdasarkan persyaratan dan konvensi proyek Anda.

Menggunakan string koneksi

Saat menggunakan string koneksi dari bagian konfigurasi ConnectionStrings, Anda dapat memberikan nama string koneksi saat memanggil metode AddSqlServerClient:

builder.AddSqlServerClient(connectionName: "sql");

Kemudian string koneksi diambil dari bagian konfigurasi ConnectionStrings:

{
  "ConnectionStrings": {
    "database": "Data Source=myserver;Initial Catalog=master"
  }
}

Untuk informasi selengkapnya tentang cara memformat string koneksi ini, lihat ConnectionString.

Menggunakan penyedia konfigurasi

Integrasi .NET AspireSQL Server mendukung Microsoft.Extensions.Configuration. Ini memuat MicrosoftDataSqlClientSettings dari konfigurasi dengan menggunakan kunci Aspire:Microsoft:Data:SqlClient. Cuplikan berikut adalah contoh file appsettings.json yang mengonfigurasi beberapa opsi:

{
  "Aspire": {
    "Microsoft": {
      "Data": {
        "SqlClient": {
          "ConnectionString": "YOUR_CONNECTIONSTRING",
          "DisableHealthChecks": false,
          "DisableMetrics": true
        }
      }
    }
  }
}

Untuk skema JSON integrasi klien SQL Server lengkap, lihat Aspire. Microsoft.Data.SqlClient/ConfigurationSchema.json.

Menggunakan delegasi sebaris

Anda juga dapat meneruskan delegate Action<MicrosoftDataSqlClientSettings> configureSettings untuk menyiapkan beberapa atau semua opsi inline, misalnya untuk menonaktifkan pemeriksaan status dari kode:

builder.AddSqlServerClient(
    "database",
    static settings => settings.DisableHealthChecks = true);

Client pemeriksaan kesehatan integrasi

Secara default, integrasi .NET.NET Aspire memungkinkan pemeriksaan kesehatan untuk semua layanan. Untuk informasi selengkapnya, lihat gambaran umum integrasi .NET.NET Aspire.

Integrasi .NET AspireSQL Server:

  • Menambahkan pemeriksaan kesehatan ketika MicrosoftDataSqlClientSettings.DisableHealthChecks adalah false, yang mana mencoba menyambungkan ke SQL Server.
  • Terintegrasi dengan endpoint HTTP /health, yang menentukan semua pemeriksaan kesehatan yang terdaftar harus lulus agar aplikasi dianggap siap menerima lalu lintas.

Pengamatan dan telemetri

.NET .NET Aspire integrasi secara otomatis menyiapkan konfigurasi Pengelogan, Pelacakan, dan Metrik, yang terkadang dikenal sebagai pilar pengamatan. Untuk informasi selengkapnya tentang pengamatan integrasi dan telemetri, lihat gambaran umum integrasi .NET.NET Aspire. Bergantung pada layanan pendukung, beberapa integrasi mungkin hanya mendukung beberapa fitur ini. Misalnya, beberapa integrasi mendukung pengelogan dan pelacakan, tetapi bukan metrik. Fitur telemetri juga dapat dinonaktifkan menggunakan teknik yang disajikan di bagian Konfigurasi .

Penebangan

Integrasi .NET AspireSQL Server saat ini tidak mengaktifkan pengelogan secara default karena keterbatasan Microsoft.Data.SqlClient.

Menelusuri

Integrasi .NET AspireSQL Server memancarkan aktivitas pelacakan berikut menggunakan OpenTelemetry:

  • OpenTelemetry.Instrumentation.SqlClient

Metode pengukuran

Integrasi .NET AspireSQL Server akan memancarkan metrik berikut menggunakan OpenTelemetry:

  • Microsoft.Data.SqlClient.EventSource
    • active-hard-connections
    • hard-connects
    • hard-disconnects
    • active-soft-connects
    • soft-connects
    • soft-disconnects
    • number-of-non-pooled-connections
    • number-of-pooled-connections
    • number-of-active-connection-pool-groups
    • number-of-inactive-connection-pool-groups
    • number-of-active-connection-pools
    • number-of-inactive-connection-pools
    • number-of-active-connections
    • number-of-free-connections
    • number-of-stasis-connections
    • number-of-reclaimed-connections

Lihat juga