Ho un servizio WCF che deve leggere grandi (da 10 a 20 milioni) numeri di oggetti dal database.Streaming di un numero indeterminato di oggetti tramite WCF
Quello che mi piacerebbe fare è che il client apra un flusso e che il server spinga i dati dal database mentre sta leggendo.
Quindi il client può semplicemente sedersi in un ciclo di deserializzazione dei messaggi fino a quando non ottiene il messaggio EOF dal server, nello stile dell'API di streaming di Twitter, ma con un set finito. Il problema che sto avendo è come restituire lo stream e poi continuare a scrivere su di esso. È possibile con WCF?
WS Dual Http non consente lo streaming. Ma in generale hai ragione. Probabilmente l'unico modo per simulare tale comunicazione in WCF è aprire la connessione Net.TCP in streaming bidirezionale (non è sicuro che questa combinazione sia possibile). Invece di restituire un singolo flusso, utilizzare la callback del client per inviare un set di dati. –
Non ho detto che consentiva lo streaming. Sto cercando di dire che è probabilmente un'opzione migliore rispetto allo streaming. È possibile eseguire lo streaming in WCF, ma bloccherà l'I/O per le altre richieste in ingresso. Non è una buona scelta quando si tratta di ridimensionare. Inoltre, la maggior parte dei serializzatori incorporati vorranno che l'intero messaggio venga scaricato prima di iniziare la deserializzazione del contenuto. –
Sarebbe meglio usare HttpHandler e scrivere nello stream in questo modo? Devo andare su HTTP in quanto si tratta di un servizio web esterno. Dai un'occhiata alla tua soluzione Matt e sembra bello, ma mi ero dimenticato di dire che potremmo avere persone che usano questo da WCF esterno, quindi immagino che dovrei seguire la rotta HttpHandler? Non sono necessariamente legato a WCF, mi chiedo solo se fosse possibile, quindi se ci sono altre opzioni migliori, sono certamente aperto a loro. Grazie per aver trovato il tempo di rispondere alla mia domanda tra. –