道歉,如果以前曾经问过,但我已经搜索过,找不到答案
我们有一个提供多达100个实例的WCF服务 - 因为有10,000个客户端但是呼叫非常快。
我们注意到的唯一性能开销是第一次调用实例...例如。第一次调用任何实例(或在回收之后),与任何其他调用相比,存在明显的延迟。
有没有办法在IIS启动时“启动”100个实例?从而消除这种开销?
有没有办法找出服务上当前有多少个实例“活动/实例化”?
非常感谢, 戴夫。
答案 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类中使用它。