抱歉,如果以前有人问过这个问题,但我已经搜索过,但找不到答案
我们有一个提供多达 100 个实例的 WCF 服务——因为有 10,000 个客户端,但调用速度非常快。
我们注意到的唯一性能开销是在第一次调用实例时……例如,第一次调用任何实例时(或在回收之后),与任何其他调用相比,存在明显的延迟。
有没有办法在 IIS 启动时“启动”100 个实例?从而消除这种开销?
有没有办法找出服务上当前“活动/实例化”的实例数量?
非常感谢,戴夫。
抱歉,如果以前有人问过这个问题,但我已经搜索过,但找不到答案
我们有一个提供多达 100 个实例的 WCF 服务——因为有 10,000 个客户端,但调用速度非常快。
我们注意到的唯一性能开销是在第一次调用实例时……例如,第一次调用任何实例时(或在回收之后),与任何其他调用相比,存在明显的延迟。
有没有办法在 IIS 启动时“启动”100 个实例?从而消除这种开销?
有没有办法找出服务上当前“活动/实例化”的实例数量?
非常感谢,戴夫。
您可以在启动后通过服务器的远程接口提供服务。
或者,如果您使用自定义托管,您可以在服务器启动时将服务类的实例传递给 ServiceHost。
如果您在 IIS 中托管,那么您将需要一个 CustomHostFactory。这里有一篇关于如何做到这一点的相当好的文章。http://msdn.microsoft.com/en-us/library/bb332338.aspx。
在跟踪实例方面,您可以只增加/减少服务类中的引用计数。
如果您在IIS 7.5上进行托管,您绝对应该查看应用程序预热模块。
应用程序启动时不能启动 100 个实例。只有当您有单例服务 = 所有请求的一个实例时才有可能。您的方案使用每个调用实例,因此每次客户端调用服务时都会创建实例并在处理调用后处理。
要预热您的应用程序,请使用 Encrico 建议的模块。如果您不使用 IIS 7.5,您还有其他选择。创建自定义控制台应用程序来 ping 您的服务。在 Windows Scheduler 中安排此应用程序。
要跟踪运行实例的数量,您可以使用性能计数器。我不确定 WCF 是否提供开箱即用的计数器,但您始终可以创建自己的计数器并在自定义 ServiceHost 类中使用它。