移动设备的客户端/服务器架构(Win CE)

时间:2009-09-03 20:48:25

标签: architecture compact-framework client-server

我正在尝试使用Compact Framework重新构建在Win CE 5.0设备上运行的程序。现在,应用程序直接与数据库通信,下拉数据,进行更改并将这些更改发送回数据库。每个客户端都负责通过轮询数据库来检索更新。

我想开发更多面向客户端/服务器的东西,其中客户端绑定到服务器,接收数据,将更改发送到服务器,服务器又将这些更改传播到其他绑定客户端 - 实时接近实时。我正在研究WCF和双工绑定,但似乎这些功能在.Net CF中是有限的。

非常感谢任何建议(和示例)。

1 个答案:

答案 0 :(得分:2)

我用于许多Windows-Mobile客户端到中央服务器应用程序的架构是通过.Net Web服务应用程序调解所有客户端到中央数据库的通信。通常,Web服务具有从数据库获取数据并将其返回到DataSet中的方法。客户端应用程序使用此DataSet(显示和添加,更新和/或删除记录),然后将修改后的DataSet传递回Web服务方法,该方法将任何更改保留回主数据库(DataSet具有许多方便的内置方法)这使得这很容易,例如GetChanges()。

如果客户端应用程序没有定期连接到Web服务,那么在本地数据库中保持数据持久性相对容易(SqlCE是一个很好的选择),尽管如果您的客户端应用程序将更加简单,你不必这样做。无论哪种方式,设计中央数据库以使用GUID(在SQL Server中称为uniqueidentifier)作为主键非常方便,并在添加新数据时在客户端创建密钥。

将从一个客户端提交的更改自动发送给所有其他客户端是一个更加困难的情况。实现此目的的最佳方式实际上取决于WinCE设备与Web服务的连接类型。如果设备基本上始终是连接的,那么每当设备启动时,您可以使用Web服务方法对每个设备进行“注册”,然后Web服务维护一个已注册客户端实例的静态列表。只要来自一个客户端的更改,Web服务就可以将这些更改“推送”到每个注册的客户端。

如果这些设备只是间歇性地连接(就像我曾经写过的每种类型的应用程序一样),最好坚持使用轮询概念,并让每个客户端应用程序“检入”Web服务(每分钟)或每隔30秒或其他任何时间)并使用任何挂起的更改进行更新。实际上,无论如何,这种方法几乎与“推送”架构无法区分,并且在实践中更容易实现和更可靠。