Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La modalità server MTP consente a un editor, all'IDE o ad altri strumenti di test di avviare un'applicazione di test e di eseguire l'individuazione e l'esecuzione tramite JSON-RPC. Usare la modalità server quando si compilano strumenti intorno a MTP. Per le normali esecuzioni da riga di comando e CI, eseguire direttamente l'applicazione di test oppure usare dotnet test.
Avviare il server JSON-RPC pubblico con --server o --server jsonrpc.
Importante
L'SDK di .NET usa un protocollo binario interno separato tramite --server dotnettestcli. Non passare questo valore manualmente.
dotnet test configura gli argomenti del trasporto e del protocollo.
Usare il client di sola origine
MTP 2.4 fornisce un client JSON-RPC canonico. Aggiungere il pacchetto Microsoft.Testing.Platform.ServerMode.Client.Sources. Il pacchetto inserisce il codice sorgente C# nel tuo progetto anziché aggiungere un assembly di runtime.
La progettazione basata esclusivamente sulla sorgente fornisce:
- Nessuna DLL di runtime o dipendenza di distribuzione aggiuntiva.
- Serializzazione nativa compatibile con AOT e priva di reflection.
- Tipi di protocollo e codice di serializzazione dallo stesso repository del server MTP.
I tipi di protocollo inseriti MtpServerClient, IMtpServerCliente possono inizializzare una connessione, individuare test, eseguire test, richiedere l'uscita del server e segnalare gli aggiornamenti del nodo di test. Tutti i tipi inseriti rimangono internal nell'assembly che utilizza.
Soddisfare i requisiti del client
Usare C# 12 o versione successiva. Il pacchetto rispetta l'impostazione della versione del language del progetto. Se per impostazione predefinita il framework di destinazione è una versione C# precedente, impostare LangVersion su 12.0 o versione successiva. Il pacchetto fornisce anche tipi di compatibilità interni per .NET Framework 4.6.2 e netstandard2.0.
Rimuovere qualsiasi copia scritta a mano del client MTP prima di aggiungere il pacchetto per evitare tipi interni duplicati.
Scegliere un modello di avvio
Per avviare l'applicazione di test come processo esterno, usare MtpServerClient.LaunchAsync. Il client è proprietario del processo figlio e lo termina durante l'disinstallazione quando necessario.
Per un host incorporato o un ambiente thread dell'interfaccia utente che non può usare Process.Start, usare MtpServerClient.LaunchInProcessAsync. Il metodo esegue l'applicazione di test tramite un callback asincrono nel processo corrente. Non bloccare il thread di avvio perché il callback e il client condividono il processo.
Entrambi i modelli di avvio usano un trasporto TCP loopback. Browser WebAssembly non è in grado di creare il listener necessario, quindi l'avvio nel processo genera PlatformNotSupportedException. L'avvio nel processo non fornisce un trasporto WebAssembly alternativo.
Arresta il client
Per rimuovere il client e avviare l'applicazione senza bloccare il thread chiamante, chiamare IMtpServerClient.ShutdownAsync(). Il metodo asincrono evita la velocità di risposta del thread dell'interfaccia utente e i problemi di deadlock negli host incorporati.
Per un host in-process, MtpServerClientOptions.ServerShutdownTimeout controlla il tempo di attesa dell'disinstallazione dopo che il client chiude il trasporto. Il valore predefinito è 30 secondi. Leggi ServerExitCode dopo lo spegnimento per ottenere il codice di uscita del callback. Il valore rimane null durante l'esecuzione dell'applicazione o quando l'applicazione non riesce anziché restituire un codice di uscita.
Dichiarare la gestione dello stato del client
A partire da MTP 2.4.1, impostare l'opzione nullable MtpServerClientOptions.IsStateful per descrivere come il client utilizza gli aggiornamenti di test-node:
| Value | Dichiarazione |
|---|---|
true |
Il client mantiene un insieme di nodi di test indirizzabili per la sessione e mantiene l'ultimo stato noto di ogni nodo fino a quando non viene modificato da un altro aggiornamento, come potrebbe fare Esplora test dell'IDE. |
false |
Il client elabora gli aggiornamenti senza mantenere lo stato del nodo di test. |
null (impostazione predefinita) |
Il client non dichiara la capacità. L'handshake di inizializzazione omette il campo. |
Il client invia un valore booleano esplicito tramite la funzionalità del protocollo sperimentale capabilities.testing.isStateful . La persistenza dello stato è indipendente dalla durata della connessione e dalla funzionalità del MultiRequestSupport server. Un client non diventa stateful solo perché invia diverse richieste sulla stessa connessione.
MTP 2.4.0 usa un'opzione booleana non nullable con valore predefinito pari a false. Per preservare una funzionalità non dichiarata, usare MTP 2.4.1 o versione successiva.
All'interno di un framework o di un'estensione, usare il servizio sperimentale IClientInfo service per esaminare la dichiarazione. Leggere clientInfo.Capabilities.IsStateful per ottenere un risultato booleano conservativo, ovvero false quando la funzionalità non è dichiarata. In MTP 2.4.1 o versione successiva, ClientCapabilitiesExtensions.GetIsStateful() mantiene la distinzione tra client non dichiarati, esplicitamente senza stato e con stato.
Negoziare la compatibilità del protocollo
A partire da MTP 2.4, la negoziazione del protocollo in modalità server è indipendente dalla versione del pacchetto NuGet MTP. Un client dichiara le versioni del protocollo supportate e il server seleziona una versione comune. Quando nessuna versione supportata si sovrappone, l'applicazione di test viene chiusa con il ProtocolError codice di uscita (12) anziché continuare con un contratto di collegamento incompatibile.
Usare lo schema JSON in modalità server con versione 1.0 per convalidare i messaggi. I serializzatori System.Text.Json e Jsonite seguono lo stesso schema e la stessa busta di errore.