构建OCA的工具(偶尔连接的应用程序)

我将构建一个内部的偶尔连接应用程序(OCA)。 您建议我采用哪些技术?

这是我的参数:

  1. .NET Shop( 3.5sp1
  2. 代码背后的C#( winform,wpf,silverlight
  3. SQL Server后端( 2005年或可能 2008年待批准
  4. 独奏开发者
  5. 独奏SQL管理员
  6. 低技术最终用户
  7. 5个分支机构的低带宽
  8. 这是一个LOB应用程序,但不是POS。
  9. 大多数用户都有将笔记本电脑带到会员家中
  10. 此应用程序的数据存储在5个单独的数据库中,但在一个SQL实例中。

我正在寻找有关选择路径的具体建议。 合并复制或Sync Framework数据库同步提供程序? 订阅服务器上的SQL Express或SQL CE? 我可以为DAL使用LINQ to SQL吗?

是Silverlight’离线/退出浏览器应用’ 示例在这里 ,可行吗?

这是我的第一个LARGE商业应用程序,因此欢迎任何经验丰富的评论。


根据要求,这里有一些关于数据类型的附加信息。 我的用户是护士和社会工作者,他们去会员家中为他们创建“计划”或“健康评估评论”。 这些是药物清单或当前“提供者”列表。 实现成员目标的步骤或当前/过去诊断的列表。 像这样的东西。

还有典型的会员姓名,地址,电话号码等。这主要是一个便于报告的数据存储和检索应用程序。 很少“处理”发生,护士和社会工作者在指定成员的团队中工作,所以我通常几乎没有交叉或潜在的数据冲突。 护士和SW也负责MCP的不同领域( 会员中心计划


附加问题; 如果我可以使用SQL 2008,Sync Framework真的只是一个可行的选择吗? 由于改变跟踪等等,这似乎是这样的想法?

一旦解决了变更检测和数据移动的问题,其他一切都是微不足道的。 换句话说,像WPF,Silverlight,Forms甚至WCF这样的技术都与您的主要问题正交,您的选择应该基于您的个人偏好和经验。 要破解的真正难点是断开连接并同步变化。 这留下了两个开箱即用的途径:Synch Framework或Replication。

我会说,对于您的场景,定义Synch Framework 。 与所有forms的复制一样,合并复制是为连续与间接断开连接的系统而设计的。 最重要的复制只能在静态名称上运行。 从各种热点和ISP连接的笔记本电脑有一个讨厌的习惯,即每次连接都要更改FQ名称。 只有在使用VPN排序并且VPN通常是主要支持问题时,复制才能克服这个问题。 复制不是为OCA系统的高移动性而设计的。

由于需要更改数据捕获或更改跟踪 ,Synch Framework将极大地迫使您使用SQL 2008后端,这两者都是仅限SQL 2008的function。

您仍然需要解决许多难题(身份validation,版本控制和升级,数据冲突解决策略,保护客户端数据以防意外丢失等)

就个人而言,我会说:

  • .NET 3.5
  • WCF数据服务(用于客户端应用程序和数据之间的通信)
  • SQL Server 2k5 / 2k8(无论哪个都可以使用)
  • Silverlight w / Out of Browserfunction
  • VistaDB(在客户端本地存储数据,直到您可以推送到服务器)

如果您在离线和未连接时创建内容,并且在连接时更新数据库,则使用unique-identifier作为密钥。

这比使用自动增量键更容易

在处理偶尔连接的应用程序之后,我建议您查看SQL Server CE以获取客户端计算机,并使用Sync Services来处理连接。 这是一个很好的教程。

看来,你可以从头开始创造这些东西。

然而,这看起来非常像CRM应用程序,如果您能够找到一个企业软件包来执行此操作而无需从头开始而是修改其中一个配置以满足您的业务规则,那就不会让我感到惊讶。

在以前的生活中,我是一个名为Siebel的配置开发人员,可能接近你所寻找的东西。 他们甚至还有一个名为Siebel Remote的内置同步工具。

它可能比从头开始自己滚动更便宜。

我为葡萄酒销售代表写了一个订单计划。 这是video。 客户端软件使用click-once安装。 这也安装SQL Server Express并加载数据库。 我使用Microsoft Sync Framework将本地数据库与服务器上的数据库同步(请参阅video的最后一部分。)

  • 现在有了强大的客户端,我认为没有任何理由不使用SQL Server Express,它是免费的,限制为4GB。

  • SQL CE有太多限制 – 没有存储过程是主要的。

  • 您将需要在任何地方使用GUID作为主键 – 请参阅新的NewSequentialID()。

  • 我喜欢点击一次,这是一个很大的节省时间。

我很期待Silverlight,但是没有时间去研究它。 如果现在这样做,我不确定我是否会使用Silverlight。

说完这一切之后,对于没有经验的人来说,这不是一个项目。 所以我也会得到一些非常有经验的帮助。