web service - cosa succede quando il cliente non riceve la risposta?

4

Abbiamo sviluppato un servizio WCF che funge da API per il nostro sistema.

alcuni metodi espongono funzionalità che alla fine scrivono e aggiornano i dati su DB.

Diciamo che il client ha inviato una di queste richieste, il servizio ha eseguito le operazioni necessarie mentre il client si disconnette per qualche motivo e non ha ricevuto la risposta.

la risposta contiene informazioni su successo / fallimento di tutte le sotto-operazioni

Un esempio di dati "problematici" in fase di aggiornamento - "Aggiungi l'importo X al saldo del membro M".

Quindi, se il client non ha ricevuto la risposta, il client non sa che i dati sono stati aggiornati.

Come dovremmo affrontare questo scenario mantenendo l'implementazione lato client più pulita possibile?

    
posta Mithir 02.11.2011 - 14:35
fonte

3 risposte

3

Invia un ID transazione.

Il server memorizza l'ID della transazione (e l'ID client).

Quando viene inviata una nuova transazione, il server controlla se sono già stati processi. Se è stato inviato invia un codice di errore al client.

    
risposta data 02.11.2011 - 14:40
fonte
0

Se è vitale che il client riceva la risposta, dovrai eseguire un tipo di interazione di commit a due fasi (il client richiama il servizio, il servizio restituisce un token di qualche tipo, gli ACK del client con token). Non è chiaro dalla tua domanda se è veramente necessario o semplicemente "bello da avere". Sarebbe accettabile fornire un servizio di tipo cronologico, in cui il cliente può richiedere lo stato dell'ultima (probabilmente l'ultima N) chiamata di servizio?

    
risposta data 02.11.2011 - 14:59
fonte
0

Se stavo progettando il servizio, farei tutti gli aggiornamenti del database in una transazione. Se il client si disconnette prima del completamento del processo, ripristinare la transazione. In questo metodo, se il client non ha ricevuto una risposta, il client può supporre che l'aggiornamento abbia avuto esito negativo.

Se ciò non è accettabile, è possibile creare una serie di tabelle per il processo di invio. Quindi confronta ogni invio con tutte le presentazioni precedenti (o almeno quelle all'interno di una certa finestra) che sono state disconnesse. Quindi controllare e vedere se l'invio è uguale alla precedente e restituire i risultati dall'originale ... anche se vedo tante potenziali insidie qui.

    
risposta data 02.11.2011 - 16:16
fonte

Leggi altre domande sui tag