2014-12-02 70 views
0

希望你能帮助我走上正确的道路。我目前正处于我的项目的设计阶段。我有一个将由我的WPF客户端应用程序使用的WCF Soap/Rest Web服务。由于WPF应用程序需要在连接状态和断开状态两方面工作,所以我遇到了如何实现缓存的设计问题。生成偶尔断开连接的WPF应用程序

我知道在使用ObjectCache的应用程序运行时缓存,但我想知道应用程序正在关闭和重新打开的情况下我想检索用户已经输入的任何东西,如果用户是断开连接,我可以抓住最后一个Web服务响应并填充表单?由于ObjectCaching仅适用于应用程序,因此我认为有一种方法是拥有一个本地数据库,其中客户端应用程序存储来自Web服务响应和用户输入/修改数据的所有数据。我不喜欢这个选项是我必须复制服务器数据库及其表和数据,我认为这不是很好的做法,也非常安全。

最后,你如何同步所有的数据?当你最终连接时断开连接,我需要调用WCF Web服务更新方法并将信息更新回服务器。这是否是某种类型的消息传递,可以在客户端上运行批处理作业,以便知道何时连接并重新处理所有数据?任何想法都会很棒。

回答

1

你要找的东西很容易完成,而且不需要客户端数据库。无论您是以这种方式实施它,都取决于您需要数据的安全程度。

要以完全断开连接的方式将数据保留在客户端上,让用户退出并返回而不会丢失条目,唯一的选择是将数据存储在客户端上。如果应用程序无法访问Web服务器来保存更改,并且应用程序关闭或崩溃,则更改将丢失,并且用户不高兴。

为了做到这一点,创建一个适合客户端字段要求的可序列化的类或类。这些类需要实现INotifyPropertyChanged,以便您可以将UI字段绑定到它并将更改保留在模型对象内(而不是UI控件本身)。你的代码也需要实现INotifyPropertyChanged。您需要一个包含数据对象实例的属性,这就是您将字段绑定到的内容。

当用户键入/进行更改时,数据绑定有3个更新选项:用户离开字段时更新属性,随着文本更改更新属性,或者等待更新属性,直到指定的延迟时间。发生这些更新时,会引发PropertyChanged事件。如果你附加了这个事件,你可以在类中编写一个方法来序列化它并保存输入的数据。一个简单的XML或JSON文件很好。您还需要添加一个加载方法来读取数据文件,将其反序列化并返回数据对象。这样,如果应用程序意外关闭或崩溃,则只需调用Load方法并将代码中的属性设置为加载的对象,绑定就可以恢复文本,并且用户可以继续。

为了保持一切都同步,客户端将对象发送到服务器,以便它可以验证并保存更改。我会使用一个字段来跟踪数据版本(如果使用SQL Server,则使用TimeStamp字段)以防止数据过期的客户覆盖较新的数据,特别是在多用户环境中时。

如果您的服务器能够利用WCF和实体框架,您可以非常快速地构建非常健壮,可靠的应用程序。

就安全性而言,这取决于所输入数据的类型以及它们背后的法律要求(即,信用卡和PCI合规性),因此您必须单独解决这些问题。

+1

好帖子... WPF应用程序正在实现INotifyPropertyChanged。 WCF应用程序也使用实体框架,以避免本地数据库,我将不得不将其提交给我的团队,让他们想到将对象序列化为文件并在稍后将其反序列化。昨天有些东西突然出现在我的脑海里,你对使用MSMQ有什么想法? – 2014-12-04 14:22:49

+0

我从来没有使用它,但它被纳入WCF,所以如果它适合您的需求然后去它。 – user2920518 2014-12-04 14:30:56

相关问题