Server dalam mode

Mode server MTP memungkinkan editor, IDE, atau alat pengujian lainnya meluncurkan aplikasi pengujian dan mendorong penemuan dan eksekusi melalui JSON-RPC. Gunakan mode server saat Anda membuat perangkat yang memanfaatkan MTP. Untuk eksekusi baris perintah dan CI normal, jalankan aplikasi pengujian secara langsung atau gunakan dotnet test.

Mulai server JSON-RPC publik dengan --server atau --server jsonrpc.

Important

SDK .NET menggunakan protokol biner internal terpisah melalui --server dotnettestcli. Jangan berikan nilai itu sendiri. dotnet test mengonfigurasi argumen transportasi dan protokol.

Menggunakan klien sumber saja

Versi pratinjau MTP 2.4 menyertakan klien JSON-RPC baku. Tambahkan paket Microsoft.Testing.Platform.ServerMode.Client.Sources. Paket menyuntikkan sumber C# ke dalam proyek Anda alih-alih menambahkan rakitan runtime.

Desain khusus sumber menyediakan:

  • Tidak ada DLL runtime atau dependensi penyebaran tambahan.
  • Serialisasi asli yang kompatibel dengan AOT dan bebas refleksi.
  • Jenis protokol dan kode serialisasi dari repositori yang sama dengan server MTP.

IMtpServerClient, MtpServerClient, dan jenis protokol yang diinjeksi dapat menginisialisasi koneksi, menemukan pengujian, menjalankan pengujian, meminta server untuk keluar, dan melaporkan pembaruan node pengujian. Semua tipe yang diinjeksikan tetap internal bagi assembly yang menggunakannya.

Memenuhi persyaratan klien

Gunakan C# 12 atau yang lebih baru. Paket ini menetapkan LangVersion ke 12.0 ketika proyek Anda tidak menentukan versi bahasa. Ini juga menyediakan jenis kompatibilitas internal untuk .NET Framework 4.6.2 dan netstandard2.0.

Hapus semua salinan klien MTP yang ditulis sendiri sebelum menambahkan paket untuk menghindari tipe internal yang duplikat.

Pilih model peluncuran

Untuk memulai aplikasi pengujian sebagai proses eksternal, gunakan MtpServerClient.LaunchAsync. Klien mengelola proses anak tersebut dan menghentikannya saat pembongkaran, jika diperlukan.

Untuk host yang disematkan atau lingkungan UI-thread yang tidak dapat menggunakan Process.Start, gunakan MtpServerClient.LaunchInProcessAsync. Metode ini menjalankan aplikasi pengujian melalui panggilan balik asinkron dalam proses saat ini. Jangan memblokir thread yang meluncurkan karena callback dan klien berada dalam proses yang sama.

Kedua model peluncuran menggunakan transportasi TCP loopback. Browser WebAssembly tidak dapat membuat listener yang diperlukan, sehingga peluncuran dalam proses memunculkan PlatformNotSupportedException. Peluncuran in-process tidak menyediakan transport WebAssembly alternatif.

Matikan klien

Untuk membongkar klien dan aplikasi yang diluncurkan tanpa memblokir thread pemanggil, panggil IMtpServerClient.ShutdownAsync(). Metode asinkron menghindari masalah responsivitas thread UI dan kebuntuan pada host tersemat.

Untuk host dalam proses, MtpServerClientOptions.ServerShutdownTimeout mengontrol berapa lama teardown menunggu setelah klien menutup transportasi. Defaultnya adalah 30 detik. Baca ServerExitCode setelah penghentian untuk mendapatkan kode keluar callback. Nilai tetap null ada saat aplikasi berjalan atau ketika aplikasi gagal alih-alih mengembalikan kode keluar.

Pilih perilaku koneksi

Atur MtpServerClientOptions.IsStateful untuk memberi tahu server apakah klien mempertahankan status di seluruh permintaan:

  • Biarkan nilai false untuk satu permintaan penemuan atau eksekusi diikuti dengan keluar.
  • Atur nilai ke true untuk sesi editor atau IDE yang mengirim beberapa permintaan melalui koneksi yang sama.

Klien mengirimkan pengaturan ini melalui kemampuan protokol eksperimental capabilities.testing.isStateful .

Baca juga