【发布时间】:2010-03-30 02:05:22
【问题描述】:
我们目前正在审查我们的 WCF 服务设计,令我困扰的一件事是在 Per-Call 和 Per-Session 服务之间做出决定。我相信我理解这两者背后的概念,但我并没有真正看到 Per-Call 服务的优势。我了解使用 Per-Call 服务的动机是 WCF 服务仅在调用期间保存一个服务器对象,从而限制了服务实例持有昂贵资源的时间,但对我来说它更易于使用更类似于 OO 的 Per-Session 模型,其中您的代理对象实例始终对应于同一个服务器对象实例,并且只需手动处理任何昂贵的资源。
例如,假设我有一个带有添加、更新、删除、选择方法的 CRUD 服务。这可以通过在服务器对象构造函数中实例化的数据库连接(“昂贵的资源”)作为 Per-Call 服务来完成。或者,它可以是一个 Per-Session 服务,在每个公开的 CRUD 方法中实例化并关闭一个数据库连接。
对我来说,这在资源方面并没有什么不同,它使编程模型更简单,因为客户端可以确保他们的代理始终具有相同的服务器对象:调用之间可能存在的任何廉价状态都得到维护,并且当服务再次实例化一个新的服务器对象时(如 Per-Call 的情况),方法上不需要额外的参数来识别服务必须检索哪些状态数据。就像使用类和对象一样,同样存在资源管理问题,但我们不会为对象上的每个方法调用创建新的对象实例!
那么我在 Per-Call 模型中缺少什么?
谢谢
【问题讨论】:
标签: wcf