我的公司有一个我们正在为其设计前端的第 3 方 Web 服务。此 Web 服务使用的“对象”非常大(并且根据创建的子实体的数量而变化)。Web 服务不公开提交/加载子实体的方法,只公开完整的对象层次结构。
UI 本身被分成许多子屏幕,主/详细视图能够高效/轻松地编辑大量数据。
问题是存储您当前未查看的所有数据的位置。
对于大的记录,做 web service commit 最多需要 30 秒,所以使用 web service 来做间歇性的数据存储是不可行的。
您可以考虑使用 .Net 的 SessionState 开箱即用,使用SQL 持久模式来缓存 Web 服务数据,尽管您确实需要确保您有一个策略来清除数据库中的过期数据。存储在 SessionState 中的所有对象都需要是Serializable。
此外,不要使用外部 Web 服务的实体结构(例如,由 .Net 添加的服务参考生成的可序列化代理实体),您还应该考虑为您的屏幕构建自己的自定义类层次结构(即自定义视图模型),然后构建在从 Web 服务初始获取之后,将 Web 服务图映射/投影到您的视图模型的桥接,然后在用户完成更新图后再次返回到 Web 服务实体。LINQ 非常适合此目的,或者可能是AutoMapper,如果您没有偏离 Web 服务类和属性命名标准。