designing for occasionally connected apps slideshare

of 25 /25
DESIGNING APPLICATIONS FOR THE OCCASIONALLY CONNECTED SCENARIO Local Database Caching with the Microsoft Sync Framework presented to NUFW on 11/10/2009

Author: dean-willson

Post on 06-Dec-2014




8 download

Embed Size (px)


Presentation on using the Microsoft Sync Framework to implement a local database cache to sync with an occasionally connected SQL Server


  • 1. Local Database Caching with the Microsoft Sync Framework presented to NUFWon 11/10/2009 DESIGNING APPLICATIONS FOR THE OCCASIONALLY CONNECTED SCENARIO
  • 2. About Me Work for Systemental, Inc as a Consultant and Software Developer Software development to support Corporate business process improvement since 2000 (Lean or Continuous Improvement Initiatives) .Net since 2004 President, Mfg. Eng. Technology degrees from Ball State University
  • 3. A case study in failure What could go wrong preparing this presentation did Initial demo worked in minutes (after about three minor problems) SQL CE debugging challenges 1. Refactor - created numerous problems 2. Test - find problems requiring schema changes 3. Repeat 1-2 ad nauseum
  • 4. What we will cover What is the Microsoft Sync Framework? How you can use it? Why? How does it work? How do you implement it? Demos Gotchas, gotchas, and debugging
  • 5. What is the Sync Framework Provider-based API for synchronizing data or files across multiple applications, services, and physical devices Included providers Database * File system Web RSS/Atom
  • 6. How can it be used? Server to Local Local to Server Bi-directional
  • 7. Why? Why not pub/sub, log shipping, replication? Reliability Purpose schedule granularity Disconnected, hello. Argument: Internet is everywhere and growing CE vs. Express Encrypt or password protect the file Document-safe, no code stored in file Light 1.8Mb vs. 58Mb
  • 8. How does it work? Visual Studio local database cache template Schema changes (couple fields and tombstone) Triggers or 2008 Change data capture
  • 9. Sync Process
  • 10. Steps to Implement Add new item - local database cache Create database/tables to sync or modify DDL Sync Configuration wizard Configure source/target databases add/edit .sdf database add sync tables Generate/run scripts to adjust ddl/sync Generate typed dataset/table adapters (optional) Generate Linq2SQL or EF classes (optional) Set sync direction and .Synchronize
  • 11. Demo project
  • 12. Keyboard Encoder Module
  • 13. Demo project details WPF application with a single keystroke input F5 key Changing background color (green, yellow, red) based on actual count vs. target count Two dispatcher timers: 1. Screen display color update (every second) 2. Db synchronization (every minute) WinForm SQL CE cache table viewer Using Repository pattern and Linq to SQL
  • 14. Demos Existing SQL db, switch to CE 3.5 using provider and connection string change Wizardry SQLMetal Profiler Server to local sync (default) local to server sync/bi-directional (code- behind)
  • 15. SQLMetal to create Linq2SQL classes
  • 16. Gotchas Visual Studio Linq2SQL template doesnt support SQL CE provider use SQLMetal to generate, then include in project LINQ dbml created from MSSQL, not compatible CE SSMS 2005 would not open a CE 3.5 .sdf file. Need SSMS 2008 Set sync direction if anything other than server to local Changing schemas after generation remove everything and start over (use sql scripts to roll back) Insert/Update triggers not auto created? .sdf is re-initialized to empty and copied to bin/debug if newer Existing triggers on the table
  • 17. Gotchas primary key Primary key defined on table to cache auto-incrementing integer primary key, unique identity with SQL CE db Some table defaults like newid() for MSSQL Uniqueidentifer field do not transfer to the .sdf schema definition. Set in code .id=Guid.NewGuid Linq cant autogenerate guid on server. Use id=Guid.NewGuid in code
  • 18. Debugging SQL CE 3.5 SSMS 2005 gives the following error when you try to connect to a SQL CE 3.5 .sdf file. Created a WinForm project PeekLocalCache to display data from .sdf file. Caution: make sure you know which .sdf file the app is using (bin/debug, bin/release, project) SSMS 2008 hopefully works Be careful re-creating the .sdf file using the local database cache configuration wizard without deleting the records from the Server table. I cleared out the Server table and ran for a while on 11/2 without ex, on 11/3 cleared out the table and ran for 13 records. Changing to update server table, works. Violation is in local cache db
  • 19. Switched PK to GUID from Int64
  • 20. Set autogen=true in dbml: fail!
  • 21. added id = Guid.NewGuid
  • 22. Conflict resolution Sorry, not covering in Demos Enums conflict types (between sync sessions) ClientInsertServerInsert - A new row is created with the same primary key. ClientUpdateServerUpdate - The same row is updated. Most common ClientUpdateServerDelete - A row is updated on the client but was deleted on the server. ClientDeleteServerUpdate - A row is deleted on the client but was updated on the server. ErrorsOccurred all others Methods for handling Continue RetryApplyingRow RetryWithForceWrite
  • 23. Resolution Policies Source wins Destination wins Specified replica wins Last writer wins Merge Log it or defer
  • 24. References Studio-2008/ 91f5-5e24d4a0b145 Compact.aspx F02ADE638EBE/Compact_Express_Comparison.doc Sync-Framework.htm!DB12DAA600AD8227!182.entry?wa=wsignin1.0&sa= 84900002 tables ASP.NET MVC Framework Unleashed by Stephen Walther, SAMS, ISBN 978-0-672-32998-2
  • 25. Thank you! Website Blogs Twitter Email [email protected] LinkedIn