Smart Client: gestire informazioni
in modalità disconnessa
Silvano Coriani
1
Agenda
• Che cosa è uno Smart Client?
– IssueVision
•
•
•
•
La gestione delle informazioni
Un approccio completamente custom
Sfruttare l’infrastruttura di SQL Server
Utilizzare codice già pronto
– Offline Application Block
2
Che cosa è uno Smart Client?
• Applicazione con interfaccia utente Windows
– NON un browser, ma UI ricca e adatta a task complessi
– Utilizza le potenzialità e sfrutta le prestazioni del client
• Interazione con dati che riesiedono sul server
– Ma anche gestione di risorse locali
• Utilizzo “smart” delle tecnologie Web
– Non una nuova architettura, ma un diverso approccio al client/server
o agli n-livelli
• Consente di gestire situazioni di “connettività occasionale”
– Dati disconnessi e sincronizzazione
• Funzionalità di sicurezza avanzate
• Facilità di distribuzione e manutenzione delle applicazioni
anche in scenari complessi
3
Demo: IssueVision
(http://www.windowsforms.net)
• Desktop client
– Applicazione pratica di Design Pattern (Observer, Command, ecc.)
– Creazione e utilizzo di Custom Control (Outlook-style)
– XP Themes
• Dati
– Gestione di dati online/offline
– Gestione della concorrenza ed eventuali conflitti
• Deployment
– No touch deployment e auto update
– Creazione di Setup e ridistribuzione del .NET Framework
• Sicurezza
–
–
–
–
DPAPI
Encryption
WS-Security
Code Access Security
4
Smart Client e gestione delle informazioni
• Alcune delle caratteristiche implementate in
IssueVision presentano molte sfide per lo
sviluppatore
– Come gestisco il funzionamento Offline?
– Come garantisco un accesso ai dati “responsive” anche
mentre il client interagisce (magari via Web Service o altro)
con il server remoto?
– Come gestisco la sincronizzazione dei dati tra client e
server?
– Come riconciliare gli eventuali conflitti che possono
verificarsi?
5
Quando “offline” ha senso…
• Effettivo utilizzo offline dei dati
– In caso di connettività completamente assente
• Situazioni di connettività intermittente
– Copertura Wireless non perfetta
• Magazzini, piazzali, utenti mobili, ecc.
• Quando la concorrenza sui “propri” dati non
è particolarmente forte
– Es: gestione dei “miei” ordini di spedizione, ecc.
• Quando le attività di modifica sui dati sono
relativamente poche
6
Dove mantenere i dati in locale?
• Environment.SpecialFolder.LocalApplicationData
– Scelta migliore per dati non-documentali
– Nome azienda, nome prodotto, versione
• Isolated Storage
– Alternativa valida per applicazioni partial-trust
– Store sicuro per applicazioni della quale non si conosce la
provenienza
• {userfiles}\My Documents
– Per i documenti
• Tip:
– Mai memorizzare i dati applicativi in “program file”!
• Forza l’applicazione ad essere eseguita come Admin!!!
• Database? Code di messaggi?
7
Alcune possibili soluzioni
• Approccio completamente custom
– IssueVision come riferimento
• Utilizzo di SQL Server/MSDE come store
locale
– Replica dei dati sul SQL Server centralizzato
• Offline Application Block
– Flessibilità e potenza
• …
8
Approccio custom: quale strategia?
• Sviluppo “in proprio” di
– Codice di accesso ai dati e Stored Procedure
– Gestione delle credenziali di sicurezza
– DataSet o oggetti custom come store locale dei
dati
– Gestione della concorrenza tra i diversi client
– Recupero dei dati e sincronizzazione con il
server
– Protezione dei dati offline
• Abbastanza complesso e costoso
9
Store locale dei dati
• Custom Data Object
– Controllo completo sull’implementazione
• Possono essere più leggeri di un DataSet
– Ideali per singola istanza di dato, informazioni non tabellari
<Serializable()> Public Class UserSettings
Private m_username As String
Private m_password As String
Public Property Username() As String
Get
Return m_username
End Get
Set(ByVal Value As String)
m_username = Value
End Set
End Property ...
• DataSet - Typed datasets
– Struttura tipizzata, già pensata per gestire le comuni attività sui dati,
estendibile
10
Gestione della concorrenza
• Politica con la quale vengono gestite le modifiche eseguite
da più utenti contemporaneamente e I possibili conflitti
• Concorrenza ottimistica
– Verifica i cambiamenti rispetto ai dati originali prima di aggiornare
– Scelta tipica di applicazioni Smart Client
• “Last in Wins”
– L’ultima modifica è quella che viene mantenuta nel database
• Molto scalabile, ma nessuna forma di integrità dei dati
• Concorrenza pessimistica
– Basata su concetti di Lock di record, pagine o tabelle nel database
da parte di un singolo utente
• Massima integrità dei dati
• Problemi di scalabilità e prestazioni
• Difficile da implementare in uno scenario Smart Client
11
Riconciliazione delle modifiche
• Metodo DataAdapter.Update()
– HasChanges(), GetChanges(), DiffGram
– Supporto per transazioni in ADO.NET
– Ideale per:
• Applicazioni con un singolo database
• Dati letti e modificati via Web services
• In generale, soluzioni che gestiscono “moderate”
quantità di dati e “moderato” numero di modifiche in
modalità offline
– Limitare la dimensione del DataSets sul client
» Tipicamente sotto i 2 MB (regola empirica)
12
Obiezione: bello, flessibile, ma molto
impegnativo da sviluppare se la
soluzione è complessa!
13
Quando i dati in locale crescono
• Consigliabile l’utilizzo di MSDE
– Motore relazionale royalty-free
– Occorre gestire il deployment sui client
– Ideale per lavorare con grandi quantità di dati
relazionali
• Scenario “database distribuito”
– Utilizzo della replicazione per sincronizzare i dati
con un SQL Server centralizzato
• Meglio se LAN o VPN
14
SQL Server Replication
• Diversi tipi di replica secondo la natura dei dati
– Merge, Transactional, Snapshot
• Programmabile per setup e sincronizzazione
– Trasparente al codice di accesso ai dati dell’applicazione
• L’applicazione lavora sempre sul db locale
• Sincronizzazione automatica o custom
– Attraverso i custom resolver (Stored Proc, componenti
COM, ecc)
• Ideale per:
– Riconciliare un grande numero di conflitti
– Eseguire aggiornamenti batch modello “ufficio periferico”
– “Dimenticarsi” della logica di sincronizzazione!
15
Obiezione: bello, molto potente, ma
occorre SQL Server sul back-end, inoltre
temo possa non coprire tutti gli scenari
applicativi che devo gestire!
16
Che cos’è un Application Block?
• È un componente disponibile in forma di codice
sorgente riutilizzabile, progettato seguendo design
pattern e best practice, per risolvere in modo
flessibile una specifica problematica legata
all’infrastruttura di una applicazione
• Il codice è fornito tipicamente in C# and VB.NET
• Documentazione
• Quick Start sample
– http://www.microsoft.com/resources/practices/code.mspx
17
Application Block: obiettivi
• Insieme di API intuitive per gli sviluppatori
• Utilizzo di design pattern durante la progettazione
• Modello di configurazione comune e consistente
tra tutti gli Application Block
– Per favorire l’automazione delle attività amministrative
• Consentono una completa customizzazione
attraverso un approccio a plug-in estendibili
• Disponibilità del codice sorgente anche come
reference per lo sviluppo di componenti complessi
• Ridurre i tempi di sviluppo del codice
infrastrutturale
18
Offline Application Block
• Copre alcune aree principali
– Rilevazione della presenza/assenza della rete
– Fornisce l’infrastruttura per incorporare
funzionalità offline in applicazioni di tipo Smart
Client
– Supporta lo sviluppo di interfacce utente
asincrone anche durante l’esecuzione di
comandi remoti (interrogazioni, aggiornamenti..)
– Consente di implementare meccanismi di
sincronizzazione tra client e server
19
Offline Application Block
• Cosa non è coperto
– Gestione della distribuzione e degli
aggiornamenti di una applicazione
• Vedere sessione successiva…
– Riconciliazione dei dati
• L’Offline Application Block mette a disposizione
l’infrastruttura, ma la logica e le strategie di
riconciliazione appartengono al dominio applicativo
– Nessuna riconcilazione
– Individuazione dei conflitti e intervento manuale degli
operatori attraverso funzionalità specifiche dell’applicazione
– Regole automatiche implementate nell’applicazione
20
Lesson learned in Microsoft
• Le lezioni imparate dai team che hanno sviluppato
questo genere di applicazioni in Microsoft sono
state
– Non è possibile incorporare queste funzionalità DOPO
che l’applicazione è stata progettata
– Alcuni scenari non possono essere coperti da questo
genere di applicazioni
– Esistono considerazioni di deployment e infrastrutturali
da tenere in considerazione quando si progettano
applicazioni che devono funzionare offline
• Alcune applicazioni particolarmente “data
dependant” non sono buone candidate per il
funzionamento in offline
21
Terminologia dell’Offline Block
• Offline Mode: La connettività di rete non è
disponibile
• Reference Data: Dati che sono tipicamente
read-only e disponibili in cache locale per
varie attività
– Es. Tabelle di decodifica
• Message Data: Dati creati durante il
funzionamento dell’applicazione
22
Offline Application Block
• Caratteristiche fondamentali
– Progettato per lavorare in uno scenario Service
Oriented, utilizzando una comunicazione
message based
– Consente un modello di programmazione
consistente tra online e offline mode
– Fornisce una architettura a plug-in per
rilevamento dello stato connessione, caching e
gestione di code di messaggi
– Componenti tra loro disaccoppiati
• Possibili differenti configurazioni per il deployment
23
Offline Application Block: componenti
24
Componenti
• Application: l’applicazione Smart Client
• Service Agent: fornisce il punto di accesso alle
funzionalità offline
• Service Request: tutti i dettagli di una richiesta
sono incapsulati in un service request object
• Queue: fornisce uno storage persistente per i
service request objects
• Executor: prende le richieste dalla coda e invoca il
servizio quando la connessione ritorna disponibile
• Service: fornisce la logica applicativa utilizzata
dallo Smart Client e tipicamente risiede su un
server remoto
25
Offline Application Block: sottosistemi
26
Sottosistemi
• Connection State Management: rileva lo stato della
connessione di rete
• Service Agent Management: gestisce i diversi
service agent e restituisce i risultati dell’esecuzione
di particolari servizi
• Reference Data Management: gestisce il download
dei dati utilizzati come cache sul client
• Message Data Management: gestisce i messaggi
contenenti le operazioni sui dati e la loro
sincronizzazione
27
Service Agent Management
• Service Agent Manager: gestisce il risultato
restituito da un Service Agent
• Service Agent: classe base per le diverse tipologie
di servizi
• Application Service Agent: creato dallo sviluppatore
dell’applicazione per inviare e ricevere i messaggi
• Online Proxy: creato dallo sviluppatore per
comunicare con il servizio remoto e gestire la
cache
– Sono stateless
28
Architettura fisica dei componenti
29
Rilevazione della connettività
1
2
30
Reference Data Management
• Data Loader Manager: consente
all’applicazione di scaricare i dati in cache
• Reference Data Cache: interfaccia per gli
utilizzatori delle funzionalità di caching
• Caching Block: implementa le funzionalità di
caching
31
Preparazione della cache locale
12
1
11
2
3
4
10
5
6
7
8
9
32
Refresh della cache locale
33
Message Data Management
• Queue Manager: gestisce i diversi provider
per le code di messaggi
• Queue Storage: fornisce l’accesso ai diversi
data store
– In-memory, Isolated Storage, MSDE, MSMQ
• Executor: legge i messaggi dalla coda e
invoca l’Online Proxy
34
Inserimento dei comandi nella coda
1
2
3
4
35
Ciclo completo di richiesta-risposta
36
Sincronizzazione dei dati
5
4
6
7
2
1
3
37
In sintesi
• Una delle funzionalità più interessanti da
implementare in uno Smart Client è la possibilità di
lavorare online – offline
• Esistono diversi approcci che possono coprire le
diverse necessità applicative
– Possiamo sviluppare il tutto da zero (IssueVision)
• Massima flessibilità ma costo spesso elevato
– Basarci su tecnologie esistenti (SQL Server)
• Ottima scalabilità, trasparente alle applicazioni ma vincolante
– Oppure basarci su componenti riutilizzabili e ben
progettati (Offline Application Block)
• Soluzione molto flessibile, estendibile in ogni sua componente!!
• Ottima come spunto per creare una propria metodologia
38
Riferimenti
• Esempi di Smart Client Windows Forms
– http://www.windowsforms.net
• Offline Application Block Download
– http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnpag/html/offline.asp
• Offline Block GotDotNet workspace
– http://www.gotdotnet.com/Community/Workspaces/workspace.aspx?
id=60dd1bb9-0d1e-45e0-975a-a7f398697344
• MSDN Patterns and Practices Web Site
– http://www.microsoft.com/practices
– http://msdn.microsoft.com/practices
39
© 2003-2004 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
40
Queue Message
• Classe container per i dati inseriti nella coda
• Contiene il payload del messaggio: tutti i dati necessari per
gestire la richiesta
– Identità dell’ Application Service Agent che deve ricevere i dati in
risposta (Service Agent GUID): popolata automaticamente
– Payload GUID – identifica ciascun messaggio: generato
automaticamente
– Nome del metodo da chiamare sull’Online Proxy: inserito
dall’Application Service Agent
– Dati da inviare al server: inseriti dalla logica dell’Application Service
Agent
– Dati ricevuti dal server: popolati dall’Online Proxy
• Può essere liberamente estesa per gestire dati “custom”
41
Altre classi legate alla chace locale
• Reference Data Cache: wrapper per fornire
l’accesso ai dati nella cache
• Reference Data Definition – i metadati associati
con gli elementi nella cache
• Reference Data Refresh Controller – responsabile
della gestione del refresh della cache quando
scaduta
• Data Loader Manager: crea il messaggio per
eseguire il download dei dati nella cache
• Reference Cache Data Payload: classe che
contiene fisicamente i dati della cache
42
Scarica

Smart Client: gestire informazioni in modalità disconnessa