WCF服务 - 在启动时创建多个实例?

时间:2010-09-06 10:33:35

标签: wcf multiple-instances

道歉,如果以前曾经问过,但我已经搜索过,找不到答案

我们有一个提供多达100个实例的WCF服务 - 因为有10,000个客户端但是呼叫非常快。

我们注意到的唯一性能开销是第一次调用实例...例如。第一次调用任何实例(或在回收之后),与任何其他调用相比,存在明显的延迟。

有没有办法在IIS启动时“启动”100个实例?从而消除这种开销?

有没有办法找出服务上当前有多少个实例“活动/实例化”?

非常感谢, 戴夫。

3 个答案:

答案 0 :(得分:2)

启动后,您可以通过远程接口从服务器获取服务。

或者,如果您使用自定义托管,也许可以在服务器启动时将服务类的实例传递给ServiceHost。

如果您在IIS中托管,那么您将需要CustomHostFactory。这里有一篇关于如何做到这一点的相当好的文章。 http://msdn.microsoft.com/en-us/library/bb332338.aspx

在跟踪实例方面,您可以在服务类中增加/减少引用计数。

答案 1 :(得分:1)

如果您在 IIS 7.5 上托管,那么您一定要查看Application Warmup Module

答案 2 :(得分:0)

应用程序启动时,您无法启动100个实例。只有当您拥有单例服务=所有请求的一个实例时,才有可能。您的方案使用每次调用实例化,因此每次客户端调用服务时都会创建实例,并在处理调用后处理。

为了预热您的应用程序使用模块Encrico建议。如果您不使用IIS 7.5,则还有其他选择。创建自定义控制台应用程序以ping您的服务在Windows Scheduler中安排此应用程序。

要跟踪正在运行的实例数,您可以使用性能计数器。我不确定WCF是否提供开箱即用的计数器,但您可以随时创建自己的计数器并在自定义ServiceHost类中使用它。