Neue Mobilität .NET Compact Framework 2.0 & SQL Server 2005 Mobile Edition Frank Prengel Developer Evangelist Developer Platform & Strategy Group Microsoft Deutschland GmbH http://blogs.msdn.com/frankpr http://www.frankpr.de Agenda Intro .NET Compact Framework 1.0 + SQLCE 2.0 Was geht? Was geht nicht? Workarounds .NET Compact Framework 2.0 + SQL Mobile Was ist neu? Future Windows Mobile Managed APIs Sie können gewinnen! Intro Windows Mobile? Smartphone? Windows CE? Phone Edition? Second Edition? Pocket PC? .NET Compact Framework 1.0 System.Web Services Description UI HtmlControls Discovery WebControls System.WinForms Design ComponentModel System.Drawing Protocols Caching Security Drawing2D Printing Configuration SessionState Imaging Text System.Data System.Xml ADO.NET SqlClient XmlDocument Serialization Design SqlServerCe Xslt/XPath Reader/Writers System Collections IO Configuration common language runtime Security Net ServiceProcess Text Reflection Diagnostics Globalization Resources Threading InteropServices Remoting Serialization nicht unterstützt verfügbar Entwicklung mit dem CF Webservices SOAP Visual Studio.NET Smart Device Extensions Code .NET Compact Framework "Desktop-Version" .NET Compact Framework Windows Device OS Entwicklermaschine Endgerät Unterstützte APIs Common Base Classes IO, Collections, Reflection, math. Funktionen, Zeichnen, Text Connectivity Networking, HTTP-Klassen, Aufrufen von Web Services Datenzugriff ADO.NET, SQL Server CE, SQL Server XML XmlDocument, XmlReader/Writer Windows Forms Custom Controls Vergleich der Versionen PPC Desktop SP CF 2.0 P/Invoke Win32-Aufrufe als Ersatz für fehlende Funktionalität Beschränkungen: Pass by value: nur Typen <= 32 Bit (auch Structs!) Pass by value: keine Floats kein explizites Struct-Layout (nur "Sequential") keine Strings oder Arrays in Structs keine Funktionszeiger keine Callbacks kein DateTime kein MarshalAs-Attribut Pocket PC & Smartphone "out of the box" in VS.NET 2003: Pocket PC 2002 DLLs, Emulator kein Smartphone 2002! CF-Unterstützung zur .NET-Programmierung: Pocket PC 2003 SDK Emulatoren Smartphone 2003 SDK DLLs, Emulatoren demo Smartphone Games Lutz Roeder's Digger Was fehlt? Wichtige Controls & UI-Features User Controls Visual Inheritance Security :-( Code Access Security Kryptographie Typisierte DataSets Vorsicht bei Verwendung von Webservices Komfortable Tools für Daten & SQLCE WSE, Application Building Blocks, ... Was fehlt noch? ASP.NET COM Interop XSLT, XPath Remoting Serialisierung (SOAP, binary) Install-time JIT (nGen) Managed POOM, Telephonie etc. “Inherited does not mean supported.” – Seth Demsey, .NET Compact Framework Team, Microsoft Corporation ... oder: Warum bleibt mein Button grau? Was tun? Tip: OpenNETCF demo PocketRK Web Services COM Interop & Inking mit CFCOM Visual Inheritance "Light" SQL Server CE 2.0 kompakte relationale Datenbank (< 2 MB) SQL-Syntax (kompat. mit SQL Server 2000) hohe Performance durch Query Optimizer unterstützt Replikation & Synchronisation 128-Bit-Verschlüsselung der DB Zugriff per ADO.NET, ADOCE, OLEDBCE unterstützt Transaktionen Mgmt. Tool (ISQLW) auf dem Gerät SQLCE & ADO.NET Zugriff vom CF System.Data.SqlServerCe SqlCeEngine, SqlCeConnection, SqlCeCommand, ... SqlCeDataReader, SqlCeDataAdapter Referenzieren von SqlServerCe Deployment von SQLCE auf Gerät oder Emulator public void CreateDatabase() { if (!File.Exists(@”\My Documents\My Data.sdf”)) { string connStr = @“Data Source=\My Documents\My Data.sdf” ; SqlCeEngine engine = new SqlCeEngine(connStr); engine.CreateDatabase(); } } Datenabgleich (1) muß Besonderheiten mobiler Anwendungen berücksichtigen Firewalls Netzwerk"aussetzer" unauffällig im Hintergrund zwei Möglichkeiten: Remote Data Access (RDA) Merge Replication Datenabgleich (2) Architektur Application SQL CE Client Agent OLE DB SQL CE Engine HTTP SQL CE Server Agent OLE DB SQL Server OLE DB Provider Internet Information Server (IIS) SQL 2000 Database Database Remote Data Access lose Kopplung SQLCE SQL Server keine "Verbindung", sondern HTTP Query-Resultate lokal gespeichert Änderungen können zurückgeschrieben werden Zugang im CF: SqlCeRemoteDataAccess RDA Pull: lokale Tabelle aus Servertabelle oder Stored Procedure RDA Push: lokale Änderungen zurück an den Server Table Tracking muß eingeschaltet sein RDA Pull/Push public void RDAPull(){ SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess(); public void RDAPush(){ SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess(); string ServerOledbStr = “Provider=sqloledb; Data Source=dataserver;”+ string ServerOledbStr = “Initial Catalog=Pubs;User Id=sa;Password=;”; “Provider=sqloledb; Data Source=dataserver;”+ Catalog=Pubs;User Id=sa;Password=;”; rda.LocalConnectionString“Initial = @”Provider=Microsoft.SQLSERVER.OLEDB.CE.2.0;” + rda.LocalConnectionString = @”Data Source=\My Documents\test.sdf”; @”Provider=Microsoft.SQLSERVER.OLEDB.CE.2.0;” + @”Data Source=\My Documents\test.sdf”; rda.InternetURL = @“http://www.dataserver.com/sqlce/sscesa20.dll”; rda.InternetURL = @“http://www.dataserver.com/sqlce/sscesa20.dll”; rda.InternetLogin = “MyDomain\someuser”; rda.InternetLogin = “MyDomain\someuser”; rda.InternetPassword = “HaRd2GuEsS!$*”; rda.InternetPassword = “HaRd2GuEsS!$*”; rda.Pull( “Authors”, rda.Push( “Select * from authors where state = ‘CA’”, ServerOledbStr, “Authors”, ServerOledbStr, RdaTrackOption.TrackingOn); RdaBatchOption.BatchingOn); } } Merge Replication Datensynchronisation SQLCE SQL Server über HTTP SQLCE erhält Snapshot vom Server Änderung auf beiden Seiten möglich Abgleich beim nächsten Synchronisieren anpaßbare Konfliktbehandlung Server agiert als Subscription Publisher zusätzliche Serverlast & Ressourcen! Verwendung im CF: SqlCeReplication RDA oder Merge Replication? RDA ist "kostengünstiger" benutzen, wenn begrenzte Funktionalität ausreicht Merge Replication bietet "Komplettlösung" aber: belastet Server & Netzwerk mehr demo SQLCE & RDA Traffic Probleme mit SQLCE 2.0 Single-User/-Proc DB keine Mgmt.-Tools für den Desktop keine Trigger, Stored Procedures nur eine Subscription pro DB (Merge Repl.) DB wächst unbegrenzt SqlCeEngine.Compact DataReader oder DataSet kein scrollable Cursor keine Unterstützung für Smartphone Fazit CF 1.0 & SQLCE 2.0 vertraute .NET-Entwicklung für mobile Geräte RAD, Webanbindung, kompakte Datenbank viele Wünsche offen, aber... 3rd Party-Apps & Community-Unterstützung Literatur Tools, Infos & Programme für Windows Mobile Entwickler 1. 2. 3. Machen Sie sich schlau im Windows Mobile Developer Center: Im Developer Center finden Sie relevante Informationen aus erster Hand: Entwicklungstools, Online Communities, Webcasts, Technische Artikel, Downloads und vieles mehr. Werden Sie Mitglied im Windows Mobile Solutions Partner Programm: Hier erhalten Developer Unterstützung bei der Entwicklung und Vermarktung von Windows Mobile Lösungen. Zertifizieren Sie Ihre Anwendung über Mobile2Market und erhalten ein Qualitätssiegel für Ihre Windows Mobile basierten Anwendungen. http://www.microsoft.com/germany/ms/mobile/entwickler Neue Welten Introducing... Allgemeines näher am "vollen" .NET Framework neue Klassen, Protokolle, Funktionalität Kompatibilität mit Version 1.0 SxS, <supportedRuntime …/> Performance neuer JIT-Compiler besseres Stringhandling .NETCF 1.0 (ROM) .NETCF 2.0 Unterstützung der Whidbey-Features Generics, partielle Klassen, Iteratoren, anonyme Methoden Windows.Forms Visual Inheritance (!) User Controls (!) Bildschirmorientierung Bildschirmauflösung Clipboard Control.DoubleClick Docking Anchoring Neue Controls DateTimePicker MonthCalendar DocumentList LinkLabel Notification Bubble Help WebBrowser DataContainer Splitter RichInk demo CF WinForms 2.0 Neue Controls Neue Features P/Invoke - Neues Strings & Arrays in Structs Marshaling von Delegates als Funktionszeiger Attribut MarshalAs explizites Struct-Layout Floats und DateTime Typen > 32 Bit können by value übergeben werden COM Interop Version 1.0 Application Code Managed Wrapper P/Invoke Version 2.0 Managed Wrapper wird generiert (VS oder TLBIMP.EXE) Projekt verweist auf Wrapper COM-Interfaces & -typen verwenden wie .NETTypen COM Object Managed Call Managed Interfaces .NET CF Interop Layer Native Wrapper COM Call Application Code COM Call Your Code Generated COM Object COM Object CF: COM aus .NET aufrufen Threads als MTA initialisiert verantwortlich: System.Runtime.InteropServices Marshal, MarshalAs keine Unterstützung für Custom Marshaler IDispatch-Einschränkungen keine Structures (VT_RECORD) keine Int64, UInt64 kein automatisches ActiveX-Control-Hosting Infrastruktur für eigene Wrapper vorhanden demo COM Interop POOM Netzwerk & Web Services System.Messaging Web Services Performancesteigerung durch schnelleren XmlSerializer Unterstützung für SOAP 1.2 CredentialCache verbesserte Authentifizierung Kerberos & NTLM IPv6 Weiteres System.IO.Ports serieller Port System.Security.Cryptography (Triple)DES, MD5, SHA1, DSA, RSA, Rijndael, ... X.509 System.Xml XPath 1.0 Schemavalidierung System.Drawing Image.Save(...), custom pens Smartphone-Unterstützung Daten SQL Mobile DataGrid Textbox: Wechsel der Eingabeart (abc, 123, T9, ...) InputModeEditor linkes Menü unterstützt mehrere Menüpunkte Visual Studio 2005 IDE für CF-Entwicklung ab Standard Edition CF nicht von Express Edition unterstützt native (C++) Device-Programmierung Ersatz für eMbedded VC++ MFC 8.0, ATL 8.0 (auch für Smartphone), STL, CRT neue Forms-Designer neuer Emulator Sichern verschiedener Zustände Windows Mobile Development Visual Studio 2005 Managed Native MFC ATL Server side ASP .NET Mobile Controls .NET Compact Framework 2.0 Win32 Software Platform (APIs) Device Management Communication Presentation Data Access Remote API Configuration* Bluetooth Security State & Notifi. * Pocket Watson Connection Manager TAPI* SMS* MAPI* POOM* ActiveSync Multimedia Home Screen User Interface/Shell HTML Control DOM SQL CE ADO CE XML CE DB OLE DB GAPI Camera D3DM Location* Windows Mobile Windows CE CE DB ActiveSync SQL CE Pocket Outlook Pocket Internet Explorer Windows Media Player Drivers Device Hardware Processor Memory Display USB or Serial Radio * = Managed wrappers GSM/GPRS CDMA/1xRTT WiFi Bluetooth Introducing... SQL Mobile kommt mit SQL Server 2005 und VS 2005 Integration in die SQL Workbench gleiche Oberfläche wie SQL Server 2005 Integration mit CF 2.0 Unterstützung für Pocket PC, PPC Phone Edition (ab WM2003) Smartphone (ab WM2003) Windows CE 5.0 (kein CE 4.x) Win32 (Tablet PC, Deployment) Neue Features Multi-User-Unterstützung Row Level Locking (Data) Page Level Locking (Index) mehr Stabilität ACID-Transaktionen Named Parameters updateable scrollable cursor: SqlCeResultSet SQL Mobile & VS 2005 Integration in Server Explorer Erstellen & Verwalten von SDF auf Desktop, Gerät oder Emulator Drag & Drop mit WinForms Erzeugung gebundener Controls Smart Tasks für Master-Detail-Ansichten Performance & Produktivität typisiertes ResultSet automatisch generiert Auflistung in DataSource-Fenster Unterstützung von Projekt & Deployment Synchronisation Multi-User-Sync Progress Notification >1 Subscriptions für eine DB Wizards für Web-Konfiguration & Sync Custom Resolver in .NET Unterstützung für SQL Server 2000 Kompression konfigurierbar Dr. Watson Architektur Native Stack Enterprise Backend Managed Stack XML/BizTalk/CS 2002 VS 2005 (VB.NET & C#) VS 2005 (C++) ADO.NET OLEDB CE SQL Mobile Data Provider OLEDB Provider SQL Mobile QP/Cursor Engine/ES Storage Engine / Repl Tracking SQL Server Client Data Provider CLR / .NET CF Data Provider Client Agent: Replication and RDA Ethernet TDS Well Connected 802.11b/a/g, CDPD, GSM, CDMA, TDMA, etc. IIS HTTP Occasionally Connected CLIENT SERVER OLEDB / Replication API Server Agent: Replication and Remote Data Access demo SQL Mobile SqlCeResultSet Admin Tools Verwendung mit CF 2.0 Merge Replication And now for s.th. completely different... Future Neues für Entwickler .NET Compact Framework 2.0-Unterstützung SQL Mobile-Unterstützung PIM Store Managed MAPI, Telephony, POOM Managed Notifications Broker D3D Mobile APIs für Kamera & Location einheitliches CAB-Format Dr. Watson Neue Namensräume Microsoft.WindowsMobile: IApplicationLauncher Microsoft.WindowsMobile.Status State & Notification Microsoft.WindowsMobile.Forms Contact Picker, Picture Picker Microsoft.WindowsMobile.Configuration Configuration manager Microsoft.WindowsMobile.Telephony Phone Microsoft.WindowsMobile.PocketOutlook Contacts, Calendar, Tasks, Email, SMS Microsoft.WindowsMobile.PocketOutlook.MessageInterception SMS interception State & Notifications einheitliches API zwecks Benachrichtigung, "wenn etwas passiert" nutzt dokumentierte Registry-Keys transient & persistent notifications State & Notifications SystemState state; void Form1_Load( ... ) { if( SystemState.IsApplicationLauncherEnabled( "MyApp.MissedCall“ ) ) { state = new SystemState( "MyApp.MissedCall" ); }void MissedCall( object sender, ChangeEventArgs e ) else { { MessageBox.Show( “Missed Calls: “ + e.CurrentValue ); state = new SystemState( SystemProperty.MissedCallCount ); } state.ComparisonType = StatusComparisonType.Greater; state.ComparisonValue = 0; state.EnableApplicationLauncher( "MyApp.MissedCall" ); } state.Changed += new ChangeEventHandler( MissedCall ); // ... } Managed POOM Contacts, Calendar, Tasks erstellen, ändern, löschen, auflisten, suchen OutlookSession Folder PimItemCollection PimItem Change-Events für Eigenschaften (nur in derselben Anwendung) Transaktionsmodell: Update des Items nach Änderungen notwendig Erstellen: Default Constructor benutzen, Eigenschaften setzen, Folder.Add(…) aufrufen Managed POOM OutlookSession outlook = new OutlookSession(); Contact c = new Contact(); c.FirstName = "Big"; c.LastName = "Bird"; c.Email1Address = “[email protected]”; outlook.Contacts.Items.Add(c); Managed Telephony Anrufe starten User Prompt optional Notifications über Anrufe durch entspr. API Private Sub callBack_Click(…) Handles callBack.Click Dim phone As New Phone phone.MakeCall( callerNumber, False ) End Sub Managed MAPI Microsoft.WindowsMobile.PocketOutlook Email & SMS Attachments EmailMessage m = new EmailMessage(); m.To.Add(new Recipient("Big bird", "[email protected]"); m.Subject ="How are you?"; m.BodyText = "I hope you're ok"; m.Send(); Dim message As New SmsMessage message.To.Add( New Recipient( callerNumber ) ) message.Body = "CALL BACK AT " + selectedTime message.Send() SMS Interception MessageInterceptor sms ; void Form1_Load( ... ) { void sms_MessageReceived(object sender, MessageReceivedEventArgs e) {sms = new MessageInterceptor(); sms.MessageCondition new MessageCondition( SmsMessage message == (SmsMessage)(e.Message); MessageProperty.Body, MessageComparisonType.StartsWith, “Foo” ); // ... }sms.InterceptionAction = InterceptionAction.NotifyAndDelete; sms.MessageReceived += new MessageReceivedEventHandler( sms_MessageReceived ); } Managed Config. Manager string filename = @"\Storage Card\2577\config.xml"; XmlDocument config = new XmlDocument(); config.Load( filename ); ConfigurationManager.ProcessConfiguration( config, true ); <wap-provisioningdoc> <characteristic type="Sync"> <characteristic type="Connection"> <parm name="User" value="frankpr"/> <parm name="Server" value="emea.mail.microsoft.com"/> <parm name="Domain" value="EUROPE"/> </characteristic> <characteristic type="Mail"> <parm name="Enabled" value="1"/> </characteristic> </characteristic> </wap-provisioningdoc> Windows Mobile Roadmap Geräte 2000 Core OS Entwicklung PlattformFeatures 2002 2003 2003 Second Edition Future Windows Mobile WinCE 3.0 WinCE 3.0 WinCE 4.2 WinCE 4.2 WinCE 5.0 eVC 3 (C++) eVB 3 (VB) eVC 3 (C++) eVB 3 (VB) eVB 3 (C++) eVC 4 (C++) VS.NET 2003 eVB 3 (C++) eVC 4 (C++) VS.NET 2003 Visual Studio 2005 (C#, VB.NET) (C#, VB.NET) MFC 3.0 MFC 3.0, ATL 3.0 .NET CF .NET CF SP2 Win32, POOM Active Sync Connection Mgr MAPI OBEX Telephony Enhanced Emulator Configuration Mgr, Bluetooth, SMS VGA (PPC) Square (PPC) Landscape (PPC) QVGA (SP) (C#, VB.NET, C++) .NET CF 2.0, MFC 8.0, ATL 8.0 State & Notification, Location, Camera, SQL CE, D3DM, Managed wrappers Fazit Mehr Performance in CF & SQL Mobile! Mehr Interoperabilität durch COM Interop & besseres P/Invoke! Mehr Produktivität & Spaß beim Entwickeln! Future Windows Mobile hebt ab! Anregungen? Lob? Bahnhof? Wünsche? Fragen? Geldspenden? Kritik? Danksagungen? Vielen Dank! © 2004 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.