C# – Tools for Building an OCA (Occasionally Connected Application)

cnetoccasionallyconnectedreplicationsql server

I will be building an in-house, Occasionally Connected App (OCA). What technologies would you suggest I employ.

Here are my parameters:

  1. .NET Shop(3.5sp1)
  2. C# for code behind (winform,wpf,silverlight)
  3. SQL Server Backend (2005 or possibly 2008 pending approval)
  4. Solo Developer
  5. Solo SQL Administrator
  6. Low Tech end users
  7. Low bandwidth to 5 Branch offices
  8. This is a LOB app but not a POS.
  9. Majority of users have laptops that they take to Member's Home
  10. The Data for this App is stored in 5 separate Databases, though in one SQL instance.

I am looking for specific recommendations on which path to choose. Merge Replication or Sync Framework database synchronization providers? SQL Express or SQL CE at the Subscriber? Can I use LINQ to SQL for the DAL?

Is a Silverlight 'Offline/Out of Browser App' Example Here, feasible?

This is my first LARGE business application so any experienced comments are welcome.


As requested here is some additional info on the type of Data. My users are Nurses and Social Workers who go to Member's homes and create "Plans" or "Health Assessment Reviews" for them. These are things like a Medication List or a List of there current "Providers". Steps to achieve members' goals or a list of there current/past Diagnosis's. Things like that.

Also the typical Members Name, Address, Phone Number, etc. Mostly this is a Data Storage and Retrieval app that facilitates reporting. Very little "processing" takes place and Nurses and Social Workers work in teams that are assigned members so I usually have very little crossover or potential data conflicts. Nurses and SW's also are responsible for different area's of the MCP(Member Centered Plan)


Additional question; Is Sync Framework really only a viable option if I can use SQL 2008? Seems that way due to the Change Tracking etc….thoughts?

Best Answer

Once you solve the problem of change detection and data movement, everything else is trivial. In other words technologies like WPF, Silverlight, Forms and even WCF are orthogonal to your main problem and your choice should be based on your personal preferences and experience. The real hard nut to crack is working disconnected and synchronizing changes. Which leaves two out-of-the-box avenues: Synch Framework or Replication.

I would say, for your scenario, definetely Synch Framework. Merge replication, like all forms of replication, is designed for systems that are connected continously with intermitent disconnects. And most critically replication can work only over static names. Laptops connecting from various hot-spots and ISPs have a nasty habit of changing FQ names with each connection. Replication can overcome this only if a VPN of sort is used and VPN is usually a major support issue. Replication is just not designed for the high mobility of OCA systems.

Synch Framework will pretty much force you to SQL 2008 back end because of the need to Change Data Capture or Change Tracking, both being SQL 2008 only features.

You will still have plenty of hard problems to solve ahead (authentication, versioning and upgrade, data conflict resolution policies, securing data on the client for accidental media loss etc etc)

Related Topic