Segnalazione e gestione di errori di processo asincroni a un client

2

Ho un prodotto con due applicazioni separate. Il nucleo del prodotto vive nel database (oracle) e funziona secondo un programma. L'altra è un'applicazione client (attualmente ASP.NET MVC3) utilizzata per gestire l'applicazione di database. Ci sono tre livelli di convalida in corso; client, lato server e database prima che i dati del client vengano salvati nel database.

Tuttavia, ci sono casi in cui pezzi del set di dati sono attualmente validi ma potrebbero diventare non validi in futuro. In questi casi invece di interrompere l'intero (lungo) processo di input dei dati, basta mettere in attesa il processo per il set di dati finché i dati non diventano validi o vengono aggiornati ad un valore valido. L'errore potrebbe essere qualcosa come: "Ehi, hai programmato il processo di copia dei dati Foo nella posizione X, e poi concedi l'accesso all'utente Bob. L'account utente Bob che hai selezionato originariamente non è più valido, cosa ti piacerebbe fare?" Annulla la richiesta di copia "Cambia l'utente" o "Attendi".

Esiste una best practice per archiviare e riportare le condizioni di errore (risolvibili dall'utente) e le eccezioni (non fatali e non riparabili dall'utente) al client dal database?

Ad esempio:
- Il database avvia il processo A
- Il database seleziona il set di dati Foo
- Durante il processo si verifica un errore o un'eccezione
- Il database memorizza l'errore o l'eccezione
- Il database gestisce l'interruzione per il processo A con il set di dati Foo
- Il database continua il processo A con il set di dati successivo fino a quando non vengono elaborati tutti i set di dati
- Il database completa il processo A

Poi qualche tempo dopo:
- L'utente accede all'applicazione client in un secondo momento (dopo il fine settimana?)
- L'utente riceve una notifica che si è verificato un errore o un'eccezione

Il mio primo pensiero è una sorta di tabella db che memorizza vari campi (event_ time_stamp, process, event, object_type, object_pk, event_code, additional_details, status, last_updated). Quindi impostando i modelli lato client (vale a dire codificati con i parametri) per ogni codice di errore e presentandoli all'utente ... ma ci deve essere un modo migliore?

Idealmente sto cercando una soluzione che permetta al cliente di fornire utili opzioni UI che aiuteranno l'utente a risolvere eventualmente gli errori.

Quali soluzioni hai trovato a questo problema? Funzionerebbe qualcosa come NServiceBus o MassTransit?

EDIT: Ci sono due diversi requisiti qui. Il primo a memorizzare le eccezioni e il secondo a segnalare (e eventualmente a intervenire) su di loro.

    
posta Saigework 02.01.2013 - 17:57
fonte

1 risposta

1

Non avendo esperienza con i due prodotti che hai elencato, ma molto con ASP.NET, direi che questo problema sembra troppo generico per un framework da indirizzare, no? Non so se dire "generico" o "specifico". Attualmente seguo l'approccio, meno desiderabile, delineato: memorizza gli errori su determinati campi db / w e li visualizza all'utente. Quello che non faccio ma che posso estendere è permettere all'utente di selezionare una voce e far sì che la correggano. È la parte "fissa" che suona troppo generica per un framework. Solo tu sai cosa "riparare" l'errore significa nel tuo contesto e puoi programmarlo per quello. In questo caso, fornire all'utente un modulo Web per aggiornare i dati e salvarli. Ho potuto vedere come i due prodotti che hai citato possano aiutarti a segnalare gli errori, ma ritengo che il resto richieda un tocco personalizzato.

    
risposta data 02.01.2013 - 18:55
fonte