Domanda

(Chiedendolo qui invece perché non so nemmeno con quale tecnologia taggarlo :))

Il mio team sta per intraprendere un progetto per convertire gran parte della nostra base di codice per utilizzare I/O asincroni, poiché il nostro mezzo di archiviazione di file viene sempre più individuato attraverso una connessione ad alta latenza. Abbiamo un'esperienza di base con lo sviluppo asincrono, ma questo è su una scala più ampia rispetto al nostro lavoro precedente. A questo punto, non sono nemmeno sicuro di dove iniziare a cercare tecnologie, modelli o documentazione su come risolvere questo problema.

La configurazione di base che dobbiamo lavorare all'interno ha applicazioni client con un'interfaccia utente che invia richieste di file a alcuni processi di base a livello locale, che svolge il lavoro effettivo di comunicazione con i servizi di archiviazione dei file per ottenere dati. (Questo livello "proxy" è necessario perché abbiamo un numero di applicazioni client che devono condividere i servizi di file, i risultati memorizzati nella cache, ecc.)

Il design che ho nella mia testa sarebbe per un cliente per inviare una richiesta al servizio, che a sua volta invierebbe una richiesta ai servizi di archiviazione dei file per iniziare un lavoro di I/O asincrono. Man mano che i progressi venivano effettuati scaricando il file, il servizio avrebbe ricevuto notifiche e avrebbe quindi licenziato un qualche tipo di meccanismo di callback al cliente dell'interfaccia utente per segnalare il processo e/o il completamento. Ciò significa che ho bisogno di una sorta di meccanismo di processo incrociato per l'esecuzione di callback.

In precedenza abbiamo utilizzato i servizi Duplex WCF per implementare qualcosa di simile a questo, ma non sono sicuro se funzionerà correttamente nel nostro caso attuale. In particolare, vogliamo gestire il caso in cui un cliente presenta una richiesta, quindi esce mentre il recupero era in corso. Il servizio deve essere in grado di rilevare che il cliente ha terminato ma mantenere scaricare il file; Quello che so dei canali duplex WCF implicherebbe che la chiusura del canale client avrebbe terminato anche il canale del servizio. Inoltre, preferirei non richiedere all'app client di sedersi in una sorta di anello di spin-block in attesa che la chiamata asincrica finisca, ma ancora una volta, la mia ricerca mi ha portato a credere che i callback duplex funzionino solo nel contesto di Una singola chiamata WCF, quindi dovremmo mantenere il thread chiamante per la durata.

Quali altri meccanismi ci sono per la registrazione e l'invio di messaggi in stile callback attraverso il processo? Il team preferirebbe una soluzione completamente gestita, anche se sono certamente aperto a opzioni non gestite se sono significativamente migliori in qualche modo.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top