Problema strutturale relativo all'iniezione di dipendenza e alle operazioni asincrone

1

Sto implementando l'architettura cipolla con webapi, livello di servizio, repository, unità di lavoro e classi di dominio. Io uso anche DI, usando un semplice iniettore.

Ma il mio problema è come posso implementare un caso d'uso specifico.

  • Il webapi dovrebbe avere la possibilità di ricevere una serie di file da l'ui. Dopo che sono stati ricevuti dovrebbero essere analizzati e il il database dovrebbe essere aggiornato con i dati analizzati.
  • L'interfaccia utente non dovrebbe attendere la richiesta, quindi l'utente può continuare facendo la sua cosa.

Quindi, dal momento che sto utilizzando il contesto di entity framework per accedere al database e impostare la sua durata dipendente dalla richiesta http sul contenitore DI, come posso essere in grado di elaborare i file e archiviarli se la mia richiesta è già morta?

Sto cercando una soluzione elegante, ma per ora non ne ho idea, quindi qualsiasi aiuto sarebbe apprezzato qui.

    
posta joseFrancisco 31.10.2018 - 09:44
fonte

2 risposte

1

Di solito il modo in cui funziona con il codice API è simile a questo:

  • Ricevi la richiesta con un batch di file
    • Aggiungi file alla coda di elaborazione
    • Rispondi con 202 Accepted risposta

Il tuo codice core nell'architettura di Onion dovrebbe sapere quale tipo di elaborazione deve essere fatto e come farlo. Quando il codice che monitora la coda di elaborazione espelle i file, passa alla logica di elaborazione.

NOTA: non sto prescrivendo più applicazioni o server di messaggi in coda, anche se aiutano con scenari di volume elevato. Sto solo descrivendo a un alto livello di come utilizzare la tua architettura di cipolla con i pezzi logici. Il livello API apre le cose alla coda, il livello di elaborazione fa uscire le cose dalla coda. Quando il lavoro viene interrotto, viene fornito per l'applicazione principale.

Se hai bisogno di monitorare lo stato di avanzamento della tua presentazione, devi anche restituire un token di tracciamento. L'interfaccia utente passerebbe il token di tracciamento a un endpoint API per ottenere lo stato. Quella chiamata sarebbe sincrona poiché dovrebbe essere un controllo rapido. Saresti responsabile del formato di quella risposta.

    
risposta data 01.11.2018 - 02:01
fonte
0

Hai bisogno di un terzo programma

  1. L'interfaccia utente (pagina web?)
  2. Il web api (.net webapi ospitato in iis?)
  3. Il lavoratore (.net windows service?)

L'interfaccia utente invia i file al web API

Il web api salva i file (senza analizzarli) in un database, in coda o ovunque e restituisce "in coda" all'interfaccia utente

L'operatore legge i file, li analizza e aggiorna il database al suo ritmo.

    
risposta data 31.10.2018 - 22:58
fonte