Režim serveru

Režim serveru MTP umožňuje editoru, integrovanému vývojovému prostředí nebo jinému testovacímu nástroji spustit testovací aplikaci a řídit zjišťování a spouštění prostřednictvím JSON-RPC. Režim serveru použijte při sestavování nástrojů kolem MTP. Pro normální spuštění příkazového řádku a CI spusťte testovací aplikaci přímo nebo použijte dotnet test.

Spusťte veřejný JSON-RPC server s --server nebo --server jsonrpc.

Important

Sada .NET SDK používá samostatný interní binární protokol prostřednictvím --server dotnettestcli. Nepředávejte si tu hodnotu sami. dotnet test nakonfiguruje argumenty přenosu a protokolu.

Použijte klienta pouze pro zdroj

MTP 2.4 poskytuje kanonického klienta JSON-RPC. Přidejte balíček Microsoft.Testing.Platform.ServerMode.Client.Sources. Balíček vkládá do projektu zdrojový kód C# namísto přidání sestavení za běhu.

Návrh pouze se zdrojem poskytuje:

  • Není vyžadována žádná knihovna DLL za běhu ani žádná další závislost pro nasazení.
  • Nativní serializace bez reflexe kompatibilní s AOT.
  • Typy protokolů a kód serializace ze stejného úložiště jako server MTP.

Vložené typy MtpServerClient, IMtpServerClient a protokolů mohou inicializovat připojení, zjišťovat dostupné testy, spouštět testy, vyžádat ukončení serveru a hlásit aktualizace testovacích uzlů. Všechny vložené typy zůstanou pro využívající sestavení internal.

Splnění požadavků klienta

Použijte C# 12 nebo novější. Balíček nastaví LangVersion na 12.0, pokud váš projekt neurčuje jazykovou verzi. Poskytuje také interní typy kompatibility pro .NET Framework 4.6.2 a netstandard2.0.

Před přidáním balíčku odeberte ručně napsanou kopii klienta MTP, abyste se vyhnuli duplicitním interním typům.

Volba modelu spuštění

Chcete-li spustit testovací aplikaci jako externí proces, použijte MtpServerClient.LaunchAsync. Klient vlastní daný podřízený proces a v případě potřeby ho ukončí během ukončování.

Pro prostředí vloženého hostitele nebo vlákna uživatelského rozhraní, ve kterém nelze použít Process.Start, použijte MtpServerClient.LaunchInProcessAsync. Metoda spustí testovací aplikaci prostřednictvím asynchronního zpětného volání v aktuálním procesu. Nezablokujte spouštěcí vlákno, protože proces sdílí zpětné volání a klient.

Oba modely spouštění používají transport TCP přes zpětnou smyčku. WebAssembly v prohlížeči nemůže vytvořit požadovaný listener, takže spuštění v rámci procesu vyhodí PlatformNotSupportedException. Spuštění v procesu neposkytuje alternativní přenos WebAssembly.

Vypnutí klienta

Chcete-li ukončit klienta a spuštěnou aplikaci bez blokování volajícího vlákna, zavolejte IMtpServerClient.ShutdownAsync(). Asynchronní metoda se ve vložených hostitelských prostředích vyhýbá problémům s odezvou vlákna uživatelského rozhraní a se zablokováním.

U hostitele v procesu určuje MtpServerClientOptions.ServerShutdownTimeout, jak dlouho ukončení čeká poté, co klient uzavře přenos. Výchozí hodnota je 30 sekund. Přečtěte si ServerExitCode po vypnutí a získejte ukončovací kód zpětného volání. Hodnota zůstane null , když se aplikace spustí nebo když aplikace selže místo vrácení ukončovacího kódu.

Zvolte chování připojení

Nastavte MtpServerClientOptions.IsStateful , aby server řekl, jestli klient zachovává stav napříč požadavky:

  • Ponechte hodnotu false pro jedno zjištění nebo požadavek na spuštění následovaný ukončením.
  • Nastavte hodnotu na true pro relaci editoru nebo IDE, která odesílá více požadavků přes stejné připojení.

Klient toto nastavení odešle prostřednictvím funkce experimentálního capabilities.testing.isStateful protokolu.

Kompatibilita s protokolem Negotiate

Od MTP 2.4 je vyjednávání protokolu v režimu serveru nezávislé na verzi balíčku NuGet MTP. Klient deklaruje verze protokolu, které podporuje, a server vybere společnou verzi. Pokud neexistuje žádná shodná podporovaná verze, testovací aplikace se ukončí s návratovým kódem ProtocolError (12) namísto toho, aby pokračovala s nekompatibilním komunikačním kontraktem.

K ověření zpráv použijte schéma JSON v režimu verze 1.0 . Serializátory System.Text.Json a Jsonite se řídí stejným schématem a obálkou chyb.

Viz také