2012-06-11 16 views
5

La nostra azienda ha persone in ogni evento catastrofico qui negli Stati Uniti e in alcune parti del Canada. Un esempio è che erano molto diffusi a Katrina subito dopo l'evento.Approccio per lo sviluppo di applicazioni disconnesse

Stiamo costruendo un'applicazione per migliorare il loro lavoro nel campo che può essere ASP.NET o WPF e il requisito di disconnessione ci fa credere che sarà un'applicazione WPF. Il nostro personale deve essere in grado di creare il proprio lavoro, fornire tutti i dati di assicurazione e di misurazione e salvarlo come se nel database fosse disponibile o meno Internet.

Il problema che stiamo cercando di capire è che in caso di eventi catastrofici il nostro personale deve essere in grado di utilizzare la nostra nuova applicazione anche quando Internet non è disponibile. (Erano offline per 3 giorni a Katrina)

Qualcun altro ha dovuto soddisfare requisiti come questo e suggerimenti su come si sono avvicinati al funzionamento su dispositivi di dimensioni ridotte mentre si salvavano i dati come se fossero ancora collegati ai servizi di back-end e al database ? Dobbiamo anche incorporare la sicurezza in questo, e farlo abbastanza bene che i loro dati inseriti vengano caricati nel database connesso senza problemi.

Il nostro obiettivo a lungo termine è quello di fornire questa applicazione per dispositivi tablet Android e IPad e laptop. Il nostro desiderio iniziale per ASP.NET è stato che ci ha dato un'applicazione immediata per l'ambiente tablet. Nella vecchia applicazione che hanno, eseguono un server locale, eseguono connessioni remote sui tablet ed eseguono l'applicazione tramite Terminal Server. Non carino. Non carino.

Ritengo che questa sia una domanda seria che non è soggettiva, quindi si spera che questo non venga eliminato.

La nostra architettura corrente sul lato server è Entity Framework con un pattern di repository, servizi WCF per soddisfare le richieste CRUD che restituiscono oggetti di trasferimento dati compositi e un proxy per l'utilizzo da parte dei client.

Sono interessato a sentire gli input di altri sviluppatori e questo puzzle di progettazione.

Informazioni aggiuntive aggiunto alla discussione

sacco di buone informazioni fornite !!! Dovrò sicuramente controllare Microsoft Sync. Per il database disconnesso, inserirò solo tabelle di elenchi (enumerazioni) nel database iniziale. I lavori e, se necessario, un articolo che chiamiamo libri a secco verranno aggiunti per ogni cliente che stiamo aiutando. (anche se spero che internet ritorni nel momento in cui stiamo pulendo e asciugando le case) Queste sono le tabelle che poi torneranno all'host una volta che avremo un link stabile. Nel caso di Katrina abbiamo anche perso la connettività internet nei nostri uffici, il che significava che l'ufficio non offriva sollievo dalla comunicazione per giorni.

Ieri sera mi sono reso conto che il nostro proxy client è la chiave per tutto ciò che funziona! Il client rimane ignaro del fatto che sia online o offline e lascia il processo di sincronizzazione all'interno di quella libreria. Stiamo scoprendo quanti dati di cui stiamo parlando oggi. Voglio anche chiarire che ASP.NET era un "like-to-have" ma un client spesso (in realtà WPF con XAML) potrebbe finire per essere il nostro stato finale.

Ora - per più aggiornamenti. Il lavoro disconnesso andrà alle singole case da un singolo franchising. In effetti il ​​nostro ufficio a casa invia franchigie specifiche a eventi specifici. Quindi abbiamo una ridotta probabilità (se ce ne sono) del problema di più persone che aggiornano un record. Il motivo è che stanno creando record per ogni lavoro (casa/ufficio/azienda della persona) e solo quel franchising si occuperà di esso.Naturalmente questo significa anche che se sono disconnessi per giorni il dispositivo che crea il lavoro (record di chi, dove, condizione, compagnia assicurativa, ecc.) È anche l'unico dispositivo che conosce il lavoro. Ma questo può essere vissuto con. In effetti, potremmo avere la possibilità di sincronizzare i dispositivi in ​​franchising su un hub.

Non vedo l'ora di ascoltare ulteriori storie su come hai implementato il tuo ambiente disconnesso.

Grazie !!!

Guardando la nuova tecnologia di Microsoft

ero diretto a guardare un video da TechEd 2012 e pensato che avrei potuto avere una risposta. Si parlava di utilizzare ASP.NET e MVC4 insieme a 2 librerie per il comportamento disconnesso. All'inizio ho pensato che sarebbe stato bello, ma poi ha continuato a preoccuparmi un po '.

Innanzitutto l'utilizzo di un back-end javascript per supportare l'I/O disconnesso non genera confidenza. Come un compilatore (e uno che ha scritto due linguaggi interpretativi), non mi piace avere un modello di business critico basato su javascript interpretativo. E sceneggiatura! Potrebbe essere me ma mi fa solo rabbrividire.

Quindi mostrano il loro "fantastico" (???) modello di programmazione con il tuo ViewModel esistente come solo javascript. Non mi interessa un'applicazione (asp.net e javascript) che può essere, e potrebbe anche essere (per mancanza di intelligenza) scritta nel blocco note.

Nessun offesa significava per tutti gli amanti dell'aspirante, ma un programma C# ben scritto che è stato sintatticamente e tipo controllato mi dà più sicurezza nel software di qualcosa scritto con una speranza e una preghiera che uno spazio dei nomi di classe è stato digitato correttamente senza alcun mezzo di controllo incrociato. Ho visto troppe ore di debug alla ricerca di un bug che è finito in un enorme spazio dei nomi con trasposto cioè nel suo nome. Ho passato il mio pensiero oltre gli altri sviluppatori senior del mio gruppo e siamo tutti d'accordo su questa tecnologia.

Ma continuiamo a guardare. (Sento che questo sta diventando sempre più di un diario che una domanda) :)

+0

C'è un motivo per cui questa deve essere un'applicazione asp.net e non una versione autonoma che può eseguire periodicamente il polling dell'attività e eseguire una sincronizzazione lenta con un set di dati master da qualche parte? – devshorts

+0

La chiave per questo sarà utilizzare qualcosa come un servizio web. Utilizzerai vari tipi di tecnologia per supportare i numerosi dispositivi che potresti avere per eseguire questa app, ma una cosa è costante, un gateway di comunicazione tra il dispositivo e il server che sarebbe il tuo servizio web. Ogni cliente può avere un database locale come sql lite. L'app eseguirà il polling delle modifiche utilizzando alcune tecniche di sincronizzazione standard. Tuttavia, ogni dispositivo acquisirà le ultime modifiche dal servizio Web dall'ultima data di sincronizzazione e modificherà o aggiungerà le modifiche pertinenti utilizzando vari metodi Web nel proprio servizio Web. – Jeremy

+1

Come si memorizzano i dati. Server SQL? –

risposta

2

Sembra un esempio perfetto per Microsoft Sync Framework

http://msdn.microsoft.com/en-us/sync/bb736753.aspx

Una piattaforma di sincronizzazione completa che consente la collaborazione e accesso offline per applicazioni, servizi e dispositivi con supporto per qualsiasi tipo di dati, qualsiasi archivio dati, qualsiasi protocollo di trasferimento e qualsiasi topologia di rete.

+0

Ho letto la documentazione di base. La sincronizzazione avviene tramite un server Web e non è necessario aprire la porta 1433? – Paparazzi

+0

È possibile utilizzare la porta SQL Server 1433 o WCF (80, 443 o qualsiasi altra cosa specificata nella configurazione di WCF). Sync Framework è veramente agnostico dal mezzo di trasferimento. –

1

Spesso trovo che creare una struttura leggera adatta alle mie esigenze specifiche sia più vantaggioso per me che utilizzare uno esistente. Tuttavia, guarda sempre ciò che è disponibile e valuta i pro e i contro prima di prendere quella decisione.

Non ho utilizzato Microsoft Sync Framework, ma sembra che sia una buona ricerca prima. Se si dispone di Sql Server Standard (o qualche altra versione diversa dalla versione Express), la replica potrebbe anche essere un'opzione.

Se si desidera sviluppare la propria soluzione homegrown, assicurarsi di inserire i campi lastupdati e dateadded in tutte le tabelle che devono rimanere sincronizzate. Non sembra che il tuo scenario sia gravato da problemi di concorrenza (ad esempio se la persona A e B modificano entrambi un campo nello stesso momento, chi vince?).Se questo è il caso, allora sviluppare la tua soluzione leggera sarà abbastanza semplice.

Come ha sottolineato Jeremy, avrete bisogno di un modo per ottenere i cambiamenti. Oltre a utilizzare un servizio Web, puoi anche utilizzare WCF che è simile a un servizio Web in qualche modo. Ma il mio pregiudizio personale sarebbe verso l'accesso a un server SQL da remoto su Internet. Lo svantaggio di questa soluzione è costituito da preoccupazioni per la sicurezza, mentre il lato positivo è rappresentato da un ridotto overhead di sviluppo (ossia uno sviluppo più veloce/più facile ora e una minore manutenzione nel tempo). Inoltre, la soluzione SQL diretta presuppone anche che si tratti di un'applicazione interna ... che sei responsabile di tutto lo sviluppo e che non lavori con terze parti che hanno bisogno di accedere ai tuoi dati e che non potrebbero accedervi in ​​questo modo .

1

Non proprio una risposta completa ma troppo per un commento.

Ho due app una che si sincronizza in un modo e l'altra in due.

Faccio una sincronizzazione unidirezionale al client per l'operazione disconnessa. Sul server SQL Server completo e sul client Compact Edition. TimeStamp è un prefetto per trovare qualsiasi riga che deve essere sincronizzata. Inoltre, non copio l'intero database in quanto alcune delle tabelle più grandi non sono non essenziali. L'uso comune è che l'utente segna i record identificati che desidera sincronizzare.

Se synch fa quello che ti serve per fare +1 su Jakub. Per me non ho la possibilità di sincronizzare l'intero MSSQL sia in base alle dimensioni che alla sicurezza.

Avere un'altra applicazione più piccola che si sincronizza in due direzioni, ma in questo caso ha regioni e l'aggiornamento è solo all'interno della regione. Quindi una regione sincronizza solo i propri dati e in modalità disconnessa possono solo aggiungere nuovi record. L'aggiornamento a un record esistente deve essere eseguito in modalità connessa. Quello era maneggevole. In tal caso MSSQL per il master e XML utilizzato per il client.

Nessuna notizia per te, ma la parte difficile di una sincronizzazione raw è che due parti potrebbero aver aggiunto o modificato lo stesso record.

+1

Microsoft Sync Framework non sincronizza solo l'intero database. Puoi sincronizzare solo determinate tabelle e determinati record dalle tabelle. Ti aiuta anche a gestire i conflitti. –

+0

@JakubKonecki Guarderò di nuovo in Sync Framework. Ti avevo già dato un +1. – Paparazzi

Problemi correlati