Come prevenire la perdita dei dati in un'applicazione .NET a causa di improvvisa mancanza di corrente?

StackOverflow https://stackoverflow.com/questions/736712

  •  09-09-2019
  •  | 
  •  

Domanda

Stiamo sviluppando un (finestre) applicazione RetailPOS .net.

Una delle cliente chiede 'Cosa accadrà ai dati in corso di elaborazione nell'applicazione quando una corrente se n'è andata all'improvviso?', 'Will l'applicazione in grado di recuperare i dati non salvati?'

Mi chiedo, come questa caratteristica può essere incluso nel .NET?

Qualcuno può aiutarmi, ciò che deve essere fatto per questo?

È stato utile?

Soluzione

In primo luogo, guardare in un UPS (gruppo di non-interuptable)

In secondo luogo, esaminare la creazione di transazioni persistenti, le transazioni che salveranno presto e spesso, ma non commettere fino a quando non si dica a. Questo va un po 'al di là delle operazioni tipiche in TSQL.

Altri suggerimenti

Se è un black-out dura (come la batteria rimossa su un computer portatile mentre scollegato), quindi non c'è molto che si può fare altro che scrivere su disco ogni. passo. di. il. modo. (Parlare di un calo di prestazioni.) E anche fare in modo di avere qualcosa di registrato per lasciare che l'applicazione sa quando inizia il backup di quello che era nel bel mezzo di fare prima, in modo che possa scegliere se continuare o ripetere l'operazione.

Se è un taglio di potenza, come il pulsante di accensione viene premuto per spegnere / sleep / ibernazione del computer, poi ascoltare per l'evento SystemEvents.PowerModeChanged e agire di conseguenza.

Infine, assicurarsi che, se i dati sarebbero danneggiati se a metà strada scritto in un database, assicurarsi che le operazioni di scrittura del database sono atomiche (sia tutti i cambiamenti avvengono e sono accettate, o nessuno di essi sono).

È possibile aggiungere le informazioni correnti in fase di ricezione al file system. Sarà un calo di prestazioni, ma vi permetterà di tornare all'ultima voce di essere catturato.

Quando si avvia l'applicazione di rilevare se v'è un file in attesa, e offrono la possibilità di recuperare. Caricare i dati salvati nel file in modo appropriato.

Una volta che avete tutte le informazioni, quando si sta facendo il processo che avviene in caso di pagamento, assicurarsi di registrare eventuali cambiamenti significativi nel processo atomico. Se si sta colpendo i sistemi esterni, record quando si sta avviando l'operazione e quando si torna subito. In precedenza c'è sempre una finestra di tempo in cui si può fallire, ma si desidera mantenere il più breve possibile e di avere informazioni sufficienti per i processi di recupero. Nel peggiore dei casi, se il sistema non è in grado di recuperare automaticamente, si desidera avere informazioni sufficienti per determinare dove il processo si è fermato.

Che cosa si vuole veramente atomica su transazioni disco. Ci sono molti modi per eseguire questi, ma spesso volte se si utilizza un prodotto di database esistente sarà fatto per voi.

Se si laminati i propri formati di database o file, avete qualche lavoro tagliare il nostro per voi a seconda del formato del file.

class PowerFailureException risolverà questo. In realtà solo mantenere il potere con un gruppo di continuità. L'unica altra opzione è davvero mantenere atomicità per le transazioni di database.

scroll top