编写基于.NET的REST服务 - 使用线程池和Singleton

时间:2012-03-22 08:41:07

标签: .net rest

我有一个昂贵的服务器端资源(这是线程安全的)。我想提供的是:

  • 远程REST接口,其他应用可以提交数据并进行处理

从非功能角度来看:

  • 我希望昂贵的服务器端对象是Singleton,即单个实例将为所有请求提供服务
  • 我想限制接受请求的数量 - 如果有更多请求,那么允许的池,休息应该在队列中等待处理。

我可以编写自定义代码来完成上述操作,但我不想这样做。自从我使用WCF以来已经有一段时间了 - 有谁能指导我设计架构?

问候。

仅供参考:由于许可限制,我实际上无法创建多个对象实例。

1 个答案:

答案 0 :(得分:1)

为什么不使用对象池模式来控制昂贵的服务器端对象的生命周期?

Singleton并对请求数量施加限制听起来很危险。迟早它会报复你,因为客户数量会增加,你的服务也会效率低下。此外,单例在并发环境中存在风险,如果Singleton有自己的状态,则两个或多个并发请求会将其炸毁。

另一方面,您可以完全控制池,创建多少昂贵的对象以及何时创建。是的,你需要一个自定义代码。

如果您仍然需要开箱即用的东西,则可以使用ServiceBehavior属性控制您的服务。 InstanceContextModeConcurrencyMode属性可能会按预期工作 - 允许您设置Singleton模式并对传入的请求进行排队(InstanceContextMode.SingleConcurrencyMode.Single)。