WCF在一段时间内没有调用它后需要时间继续通话

问题描述:

我开发了一个WCF REST Api,它使用NHibernate作为持久层。我目前正在使用Per-Session服务,但已经阅读Per-Call服务是继续进行类似我所做的事情的方式。WCF在一段时间内没有调用它后需要时间继续通话

有2件事(可能非常相关)我不喜欢,我想删除它。

  1. 在第一次调用到它需要像20秒反应,这可能意味着,它被加载库和instanciating类API。在任何电话发生之前我可以这样做吗?我已经在ServiceContract实现类上有一个静态构造函数,但它并没有减少它加载的时间。

  2. 在随后的通话中,如果我停止拨打服务约10分钟,通话时间将从1秒再次超过20秒。这是我最关心的问题,因为客户端必须有30秒的超时时间,对于用户来说它可能看起来应用程序崩溃了。

我该如何改进?您有任何提高这些服务性能的提示吗?

+0

您是否检查过IIS中的应用程序池重新加载属性? – faester 2011-05-25 17:12:21

+0

服务是否托管在IIS中?如果是,那么IIS如何针对应用程序池回收进行配置? – 2011-05-25 17:15:02

似乎是IIS应用程序池回收的一个明显情况,所以假设您在IIS中托管此WCF服务是合理的。

有几个选项:

  1. 主机IIS以外的服务(WCF can be hosted作为一个独立的Windows服务)
  2. 调整app pool recycling frequency

尝试登录您的Application_Start()和Application_End()显示您的应用程序启动和停止的时间。这可以给你一个想法,如果这是你的问题。

另外它也可能是Session_Start/End类型的东西。

如果您认为您的网站会变得越来越忙,那么您的应用程序停止并始终开始不会是这样的问题。