Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Le mode serveur MTP permet à un éditeur, à l’IDE ou à un autre outil de test de lancer une application de test et de générer la découverte et l’exécution via JSON-RPC. Utilisez le mode serveur lorsque vous générez des outils autour de MTP. Pour les exécutions de ligne de commande et ci normales, exécutez l’application de test directement ou utilisez dotnet test.
Démarrez le serveur JSON-RPC public avec --server ou --server jsonrpc.
Important
Le sdk .NET utilise un protocole binaire interne distinct via --server dotnettestcli. Ne transmettez pas cette valeur vous-même.
dotnet test configure les arguments de transport et de protocole.
Utiliser le client source uniquement
La préversion MTP 2.4 fournit un client de JSON-RPC canonique. Ajoutez le package Microsoft.Testing.Platform.ServerMode.Client.Sources. Le package injecte la source C# dans votre projet au lieu d’ajouter un assembly runtime.
La conception basée uniquement sur le code source comprend :
- Aucune DLL d’exécution ni dépendance de déploiement supplémentaire.
- Sérialisation native, compatible AOT et sans réflexion.
- Types de protocole et code de sérialisation à partir du même référentiel que le serveur MTP.
Les types injectés MtpServerClient, IMtpServerClient et de protocole peuvent initialiser une connexion, découvrir des tests, exécuter des tests, demander l’arrêt du serveur et signaler des mises à jour des nœuds de test. Tous les types injectés restent internal pour l’assembly qui les consomme.
Répondre aux exigences du client
Utilisez C# 12 ou version ultérieure. Le package définit LangVersion sur 12.0 lorsque votre projet ne spécifie pas de version du langage. Il fournit également des types de compatibilité internes pour .NET Framework 4.6.2 et netstandard2.0.
Supprimez toute copie écrite manuellement du client MTP avant d’ajouter le paquet afin d’éviter les doublons de types internes.
Choisir un modèle de lancement
Pour démarrer l’application de test en tant que processus externe, utilisez MtpServerClient.LaunchAsync. Le client est responsable de ce processus enfant et le termine pendant la phase de nettoyage, si nécessaire.
Pour un hôte incorporé ou un environnement de thread d’interface utilisateur qui ne peut pas utiliser Process.Start, utilisez MtpServerClient.LaunchInProcessAsync. La méthode exécute l’application de test via un rappel asynchrone dans le processus actuel. Ne bloquez pas le thread de lancement, car le rappel et le client partagent le processus.
Les deux modèles au lancement utilisent un transport TCP en boucle locale. WebAssembly dans le navigateur ne peut pas créer le listener requis, donc le lancement dans le processus génère PlatformNotSupportedException. Le lancement in-process ne fournit pas de transport WebAssembly alternatif.
Arrêter le client
Pour arrêter le client et l’application lancée sans bloquer le thread appelant, appelez IMtpServerClient.ShutdownAsync(). La méthode asynchrone évite la réactivité des threads d’interface utilisateur et les problèmes de blocage dans les hôtes incorporés.
Pour un hôte dans le processus, MtpServerClientOptions.ServerShutdownTimeout contrôle le temps d’attente de la phase de démontage une fois que le client a fermé le transport. La valeur par défaut est 30 secondes. Lisez ServerExitCode après l’arrêt pour obtenir le code de retour du callback. La valeur reste null pendant l’exécution de l’application ou lorsque l’application échoue au lieu de retourner un code de sortie.
Choisir le comportement de connexion
Définissez MtpServerClientOptions.IsStateful pour indiquer au serveur si le client conserve l’état entre les requêtes :
- Conservez la valeur
falsepour une seule requête de découverte ou d’exécution, puis quittez. - Définissez la valeur sur
truepour une session d’éditeur ou d’IDE qui envoie plusieurs requêtes sur la même connexion.
Le client envoie ce paramètre via la fonctionnalité de protocole expérimental capabilities.testing.isStateful .