我有一个昂贵的服务器端资源(这是线程安全的)。我想提供的是:
从非功能角度来看:
我可以编写自定义代码来完成上述操作,但我不想这样做。自从我使用WCF以来已经有一段时间了 - 有谁能指导我设计架构?
问候。
仅供参考:由于许可限制,我实际上无法创建多个对象实例。
答案 0 :(得分:1)
为什么不使用对象池模式来控制昂贵的服务器端对象的生命周期?
Singleton并对请求数量施加限制听起来很危险。迟早它会报复你,因为客户数量会增加,你的服务也会效率低下。此外,单例在并发环境中存在风险,如果Singleton有自己的状态,则两个或多个并发请求会将其炸毁。
另一方面,您可以完全控制池,创建多少昂贵的对象以及何时创建。是的,你需要一个自定义代码。
如果您仍然需要开箱即用的东西,则可以使用ServiceBehavior
属性控制您的服务。 InstanceContextMode
和ConcurrencyMode
属性可能会按预期工作 - 允许您设置Singleton模式并对传入的请求进行排队(InstanceContextMode.Single
和ConcurrencyMode.Single
)。