Come fare una lunga client di polling in C #?
-
20-09-2019 - |
Domanda
Ho un C # un'applicazione desktop, e ho utilizzare un servizio Web senza problemi (WSDL aggiunti da "aggiungere riferimenti di servizio", così creo un oggetto e chiamare le sue funzioni).
Ora, voglio usare le tecniche di polling lungo, ma non riesco a capire come fare questo dal punto di vista del cliente.
Come configurare il timeout? Dovrei usare un filo dedicato a questo? C'è un esempio per un C # applicazione desktop? (Non hanno trovato alcuna)
Grazie, Diga di
Soluzione
Si dovrebbe essere in grado di configurare il timeout per l'oggetto servizio Web - i dettagli dipenderà esattamente quale classe che sta utilizzando, ma guardare WebClientProtocol.Timeout
per un esempio.
Ora si potrebbe o chiamare tale modo sincrono da un thread dedicato, o si potrebbe fare un asincrono chiamare al servizio web per iniziare, specificando un callback da eseguire (probabilmente su un thread pool di thread ) quando il servizio risponde. In questo caso, si possono trovare è possibile specificare il timeout sulla chiamata asincrona in sé - ancora una volta, dipenderà esattamente che tipo di web classe di servizio proxy che hai
.In questo modo non c'è bisogno di "sprecare" un filo solo in attesa per la risposta - ma si potrebbe scoprire che il modello di programmazione asincrona è più difficile da capire rispetto a quella sincrona. Se hai solo uno o due di queste richieste in qualsiasi momento, la coppia extra di thread è improbabile che sia un problema. Se siete in attesa di risposte da 500 diversi servizi, che è una questione diversa e il modello asincrono sarebbe sicuramente la strada da percorrere.
Altri suggerimenti
Per problemi di threading, vedere la risposta di Jon.
Per il problema di timeout, ecco la soluzione: In VS 2008, quando aggiungo un "riferimento al servizio" da un WSDL, userà WCF per difetto, e non riesco a trovare il modo di impostare un valore di timeout con esso.
Così, quando clic destro su riferimenti di servizio, devo decidere "riferimenti web" (/ aggiungere riferimento web avanzato). In questo modo, si utilizza solo servizi web "normali" e il parametro Timeout è disponibile.