生成偶尔断开连接的 WPF 应用
本文关键字:WPF 应用 连接 断开 偶尔 | 更新日期: 2023-09-27 18:33:01
希望你能帮助我走上正确的道路。我目前处于项目的设计阶段。我有一个 WCF Soap/Rest Web 服务,将由我的 WPF 客户端应用程序使用。由于 WPF 应用程序需要在连接和断开连接状态下工作,因此我遇到了如何实现缓存的设计问题。
我知道在使用 ObjectCache 的应用程序运行时进行缓存,但我想知道在应用程序关闭并重新打开的情况下,我也想检索用户已经输入的任何内容,如果用户断开连接,我可以获取最后一个 Web 服务响应并填充表单?由于 ObjectCaching 仅在应用程序启动时,我认为一种方法是拥有一个本地数据库,客户端应用程序在其中存储来自 Web 服务响应和用户输入/修改数据的所有数据。我不喜欢这个选项的是我必须复制服务器数据库及其表和数据,我认为这不是很好的做法,而且非常安全。
最后,如何同步所有数据?当您最终连接时断开连接时,我需要调用 WCF Web 服务更新方法并将信息更新回服务器。这是否是某种类型的消息传递,其中包含将在客户端上运行的批处理作业,该客户端将知道何时连接并重新处理所有数据? 任何想法都会很棒。
您正在寻找的内容很容易完成,并且不需要客户端数据库。是否以这种方式实现它实际上取决于您需要数据的安全性。
若要以完全断开连接的方式将数据保留在客户端上,让用户退出并返回而不会丢失其条目的风险,唯一的选择是将数据存储在客户端上。如果应用程序无法访问 Web 服务器以保留更改,并且应用程序关闭或崩溃,则更改将丢失,并且用户不满意。
若要实现此目的,请创建一个或多个符合客户端字段要求的可序列化类。这些类需要实现 INotifyPropertyChanged,以便您可以将 UI 字段绑定到它,并将更改保留在模型对象中(而不是 UI 控件本身(。你的代码隐藏还需要实现INotifyPropertyChanged。您需要一个保存数据对象实例的属性,这就是将字段绑定到的属性。
当用户键入/进行更改时,数据绑定有 3 个更新选项:在用户离开字段时更新属性,在文本更改时更新属性,或等待更新属性,直到指定的延迟时间之后。发生这些更新时,将引发属性更改事件。如果附加到此事件,则可以在类中编写一个方法来序列化它,并在输入数据时保存数据。一个简单的XML或JSON文件就可以了。您还需要添加一个 load 方法来读取数据文件、对其进行反序列化并返回数据对象。这样,如果应用程序意外关闭或崩溃,您只需调用 Load 方法并将代码中的属性设置为加载的对象,绑定将还原文本,用户可以继续。
为了使所有内容保持同步,客户端将对象发送到服务器,以便它可以验证并保存更改。我会使用一个字段来跟踪数据版本(如果使用 SQL Server,则使用时间戳字段(,以防止具有过时数据的客户端覆盖较新的数据,尤其是在多用户环境中时。
如果您的服务器能够利用 WCF 和实体框架,则可以非常快速地生成非常可靠、可靠的应用程序。
就安全性而言,这取决于输入的数据类型及其背后的法律要求(即信用卡和PCI合规性(,因此您必须单独解决这些问题。