www.thinkmobile.it
• Blog
• Forum
• Comunità per scambiarsi idee
• Tecnologiche e non
•
•
•
•
ASP.NET Mobile Controls
.NET Compact Framework
SQL CE / SQL 2005 Mobile
Sviluppo nativo in C++
Scambio Informazioni
Roberto Brunetti
[email protected]
http://blogs.devleap.com/rob
http://thinkmobile.it/blogs/rob
Socket
• Namespace System.Net.Sockets
• Identico al Desktop
• Sincrone / Asincrone
• Vari Protocolli
• GGP-ICMP-IDP-IGMP-IP-IPV6-IPX-ND-PUP-RAW-SPXSPXII-TCP-UDP
• Paradigma Send / Receive
• Supporto Async
• BeginSend / BeginReceive
• BeginAccept / EndAccept
HttpWebRequest
Dim Req as HttpWebRequest
Req = CType(WebRequest.Create
(http://xxx.com/Pippo.xml, HttpWebRequest)
Dim Resp as HttpResponse
Resp = Req.GetResponse()
Scenari
• Applicazione stand-alone
• Scambio dati con ActiveSync (Cradle, Server)
• Magazzino Wi-Fi
• Accesso diretto al database ?!?
• Agente esterno che prende ordini
• Serve store locale di informazioni
• DataSet salvato in locale, SQL CE
• Meccanismo di replica dati
• SQLCE nativo, MSMQ, Web Service
• Vogliamo avere comunicazioni Server Client
• HTTPD su Windows CE (solo ASP)
• Socket
• MSMQ
Scelte accesso ai dati
Smart client
.NET Compact
Framework
1. XML Web
Service
XML Web
Service
2. Accesso SQL Server
4. ADO.NET
Dati Locali
SQL Server CE
SQL Server
3. Sincronizzazione
Windows CE
(http)
Windows Server
Scelte Accesso ai Dati
• 1. XML Web services
• Riutilizzo Web service (desktop, mobile web ecc.)
• Incapsulamento Business Logic
• Non solo dati... Operazioni/Calcoli etc
• 2. Direct SQL Server
• Più semplice per applicazioni sempre on-line
• Business Logic sul client (Client / Server)
• 3. SQL Server CE Synch
• Utilizzo di dati locali
• Sincronizzazione auto/granulare dei dati
• Applicazioni Off-line
• 4. Local data access
• Utilizzo di store locale per applicazioni Off-line
• Utilizzo ADO .NET, SQL Server CE, XML
Web Service .NET
• Documento .ASMX pubblicato sul Web
• Namespace System.Web.Services
• Direttiva: <%@ WebService Language=“???” Class=“???” %>
• Associare alla classe dei WebMethod:
[WebMethod()]
public String LeggiDato() { … }
public boolean SalvaDati() { … }
• Si basano sulla serializzazione XML
(System.Xml.Serialization) e sul motore di ASP.NET
.NET CF e WS
• Identico al .NET Framework
• Da VS.NET
• Add Web Reference verso il file WSDL
• Assegnare un nome
• Utilizzo tradizionale
Dim x as New XXXXX.Servizio()
X.Metodo()
Sync via Web Service
Windows
Forms
ASP.NET
ADO.NET
WS Client
Database
Local Data
.NET Framework
.NET Compact
Framework
•
Pro
•
•
•
•
HTTP
Caching con WriteXml
Sincronizz. sul Server
Nessun bridge
•
Contro
•
•
Logica di sincronizzazione da
gestire
Peso del trasferimento dei
dati XML
Cosa scambiare
• DataSet
• Supporto nativo in 1.0 e 2.0
• Typed DataSet
• Supporto in 2.0
• DataTable
• Serializzabile in .NET CF 2.0
• GetChanges
• Implementato nella 2.0
• Per la 1.0
http://blogs.devleap.com/rob/archive/2004/11/10/2003.aspx
• Classi custom
• Più aperto verso altre piattaforme
• Più lavoro da fare
• XML
• 2.0 Serializzazione, XPath, XmlSchema
Due consigli
• Se scambiamo dati
• Passare solo quello che serve
• Dummy Call
• La risoluzione dei nomi è lentina
• La prima richiesta può impiegare del tempo
• Invocazione asincrona
• 1.0 BeginMetodo
• 2.0 MetodoAsync
• Creare componente separato
• Che conosce i dettagli delle chiamate
• Oggi WS domani SOA (WSE2/WSE3)
WS: Stato dell’arte
• XML Signature
• XML Encryption
• WSA
• WS-I: Consorzio per trovare standard veri
• .NET 2.0 allineato a WS-BasicProfile 1.0
• WS-Security
• WS-Trust
• WS-SecureConversation
• WSE 2 SP3 per l’ambiente Desktop
• OpenNETCF 1.3
• Indigo
• Ci sarà per Windows Mobile
ADO.NET verso SQL Server
• Reference System.Data.SqlClient
• V 3.0.3600 - Richiede Setup sul Device
• Utilizzo classico
• Stored Procedure
• Viste
• Novità di SQL 2005
• Broker – SQLCLR – Campi XML
• Ancora una volta
• Da componente separato per sfruttare caratteristiche
del DB e poter sostituire i componenti
SQL CE / Sql 2005 Mobile
eVB 3.0
ADO
CE
v3.0
Active X
Objects
eVC
3.0
OLEDB CE
SQL Server 2000 Windows CE Edition
OLEDB
Client
Agent:
Replication
QP/Cursor Engine/ES
OLEDB
IIS
HTTP
Server
Agent:
Replication
and
Remote
Data Access
Storage Engine / Repl Tracking
CLIENT
Approccio orientato ai dati
SERVER
MSMQ on Windows CE
“Realtà” Distribuita
• Più macchine, più reti
• Molte apps non sono 100% online
• Molte “reti” non sono 100% disponibili
• Scenari di malfunzionamento “moltiplicati”
• I danni possono essere dispendiosi
• Scenari Home Office, Mobile (e disconnected)
Carichi di lavoro in base a priorità
• Accessi concorrenti
MSMQ dal 1997
• Servizio di comunicazione
• Asyncronous Comunication
• Velocità diverse (App:App, Machine:Machine)
• Offline
• Message Delivery garantito
• Routing di messaggi
• Priority-based
Architettura
Machine 1
Application
1
Application
2
MSMQ
API
Open

Rec’v
Send
Close

Queue manager
‘A’
‘B’
Msg queues
‘C’

Sys
Sys
I messaggi sono
mantenuti in code
Le code sono gestite
da gestori di code
Le apps accedono a
MSMQ via semplici API
o oggetti COM
System
• MSMQ rende possibile lo scambio di messaggi
fra programmi
MSMQ: Configurazione
• MSMQ Server
•
•
•
•
•
Queue manager
Routing service
Directory service
MSMQ Explorer
Applicazione Client locale
• MSMQ-dependent client
• Nessun queue manager
• Richiede un MSMQ Server
• MSMQ-independent client
• Queue manager
MSMQ Servers
•
Store di messaggi
 Instrada messaggi
 Supporta applicazioni
locali
 Supporta accesso da
client remoti
 Fornisce
MSMQ Explorer
 Topologie di rete
 Routing
 Gestione
Application
1
Application
2
MSMQ Server
API
Open
Rec’v
Send
Close
Client proxy
server
Information
server
Queue
manager
Routing
server
‘A’
‘B’
‘C’
Sys
Sys
MSMQ-Independent Client
•
Invia e riceve messaggi
Application
1
 Memorizza messaggi
 Opera anche off-line
 Non supporta
dependent client
 Non può agire da
MSMQ router
 Obbligatorio per i
portatili disconnessi
Application
2
MSMQ Workstation
API
Open
Rec’v
Send
Close
Queue
manager
‘A’
‘B’
‘C’
Sys
Sys
Scenario App -> Server
App A
Internet
App B
•
•
App A sul device invia messaggi a code public o private su un
server
App B sul server scoda
•
•
Volendo transazionalmente
Levo il messaggio solo se TX su DB a buon fine
Scenario Device - Device
LAN only
App A
App B
•
•
•
App B crea una coda privata locale
App A invia messaggi alla coda dell’altro device
App B legge i messaggi dalla coda locale
•
N.B: MSMQCE può scrivere ma non leggere da code remote
MSMQ on Windows CE 3.0
• Indipendent Client
• Non necessita di infrastruttura
• Può lavorare come client tradizionale
• Singola Coda
• Sending/Receiving
• Sul device o su un altro device raggiungibile
• Se non raggiunbile si può passare da un server
• Delivery
• Express
• Recoverable
• Transaction Single-Message
• Ordinamento
• Delivery Exactly Once
MSMQ on Windows CE 3.0
•
•
•
•
Message Prioritization
Message Label
Journaling Supportato
Network Tracking
• Instant Reconnection
• Regitry per configurazione
• Accesso by Computer Name
• Necessario DNS o WINS: lookup e reverse lookup
• Unique name dei vari device
• NETREGD: utility per registrare CE in WINS
• Da CE 4.2 accesso via http alle code
Demo App to App
Application A
Messages
MSMQ
Messages
Application B
• Solo Codice DLMobility/MSMQ20/EstatesManagement20
• Send
• Receive
• ReceiveAsync
• Tornare sul desktop
• Stesse righe di codice
• Visualizzazione code da Computer Manager
• O MSMQ Explorer
• Stesse demo
Recoverable
• Message.Recoverable
Message m = new Message();
m.Body = orderObject1;
m.Recoverable = true; // guaranteed delivery
• True
• Il delivery è assicurato (salva il messaggio su “disco”)
• Durante tutta la strada
• Più lento e consuma più risorse
• Sopravvive a reboot
• False (Default)
• Delivery non garantito
• Veloce e leggero
• Possibile perdita dei messaggi
Transaction
• I messaggi recoverable sono garantiti ma
• Possono essere spediti più di una volta
• Possono essere spediti in ordine “sparso”
• Messaggi transazionali
• Exactly-Once / In-Order
• Supporto solo per Single Internal Transaction
• Nessun supporto per MTS/COM+
• Occorre creare code transazionali
• E usare i parametri seguenti
MessageQueue mq = new MessageQueue(@".\Private$\TranQ", true);
Message m = new Message();
m.Body = orderObject1;
mq.Send(m, MessageQueueTransactionType.Single);
Timeout
Proprietà
Significato
Message.TimeToReachQueue
Message.TimeToBeReceived
Tempo per raggiungere la coda e per essere letto
Assicurarsi la sincronia dei clock o casini !!!
Message.AdministrationQueue
Coda associabile al messaggio. Riceverà messaggi
sull’avvenuta spedizione/ricezione/lettura
Message.AcknowledgementType
Tipo di Ack richiesto NegativeReceive,
PositiveReceive, FullReceive
Message.UseDeadLetterQueue
Usa coda di sistema machine\Deadletter$
false – messaggi non spediti persi
true – copia dei messaggi non spediti nella Dead
Letter Queue
Jounaling
Si può decidere di tenere una copia di ogni
messaggio nella coda di sistema
Admin Queue
// Creo Coda amministrativa
MessageQueue.Create(@".\private$\AdminQueue");
// Messaggio
Message myMessage = new Message(“Ciao Ciao");
myMessage.AdministrationQueue =
new MessageQueue(@"PPCDEVICE\private$\AdminQueue");
myMessage.AcknowledgeType = AcknowledgeTypes.FullReceive;
myMessage.TimeToBeReceived = new TimeSpan(0,0,5);
// Invio normale
MessageQueue myQueue =
new MessageQueue(@“SERVER\private$\myQueue");
myQueue.Send(myMessage);
// Recupero il MessageID per interrogare coda admin
string messageId = myMessage.Id;
• N.B Il messaggio non arriva o viene cancellato se non
letto entro il timeout (Timeout 5 secondi)
Passo successivo
• Ho bisogno di una risposta dall’applicazione che
processa i messaggi
• Imposto ReponseQueue sul messaggio per indicare
dove voglio la risposta
• Il ricevente legge msg.ResponseQueue per inviare le
risposte
• Leggo la coda indicata come ReponseQueue per vedere
le risposte
Abbiamo ancora tempo ?
• Installazione (Platform SDK)
• C:\Program Files\Windows CE Tools\wce420\POCKET PC
2003\Support\Msmq
• Copiare i file sotto \Windows
• Per il processore corretto come sempre
• N.B. Emulatore
• X86 VS.NET 2003 e Platform SDK
• ARM VS 2005
•
•
•
•
Dare un Nome al Device
VisAdm.exe -> Shortcuts -> Install
VisAdm.exe -> Shortcuts -> Register
Soft Reset
Starting MSMQ On The Device
• Alcuni device hanno già tutto
• Per gli altri
• msmqadm.exe - msmqadmext.dll - msmqd.dll msmqrt.dll - visadm.exe
• Si trovano in Windows Mobile 2003 SDKs
• C:\Program Files\Windows CE Tools\
wce420\{device}\Support\msmq\armv4
• Usare \armv4 (non \x86) per Emulatori di VS 2005 !
• Per Windows Mobile 5.0
• MSMQ CAB file
Starting MSMQ
•
File Explorer \windows\visadm.exe
•
Install
•
Register
•
Verify
•
Start
•
Status
Installazione da codice
• Runtime file nel progetto
• Build Action a Content
• Copy to Output Directory a
Copy if Newer
• Codice per copiarli sotto \Windows
• CreateProcess per chiamare
msmqadm.exe per installare e far
partire il servizio
MQ: la soluzione a tutto ?
• Molte realtà necessitano di diverse tecniche di
comunicazione
• Può essere un overhead significativo
• Quando il mittente necessita di info dal destinatario
• Single server o piccola LAN
• Installazione e programmazione
• Non offre un “all-or-nothing” distribuito
• Per definizione comunicazioni Asincrone
• Non offre supporto per i dati
• Non ha un DB, non è un DB
• Affiancabile a SQL CE o SQL Server
Comparazione
HTTP
Support
Handling
Network
Availability
Security
Facilità
Deployment
Server config
MSMQ
¹




Web
services

³



Sockets
²
³



SQL Mobile
RDA

³



1. MSMQ HTTP non supportato da Windows Mobile 3.0
2. System.Net.HttpWebRequest\WebResponse usano le Socket
3. Web services, Sockets e SQL Mobile richiedono codice per capire lo stato della connessione
Scarica

MSMQ on Windows CE