WCF在一段时间内没有呼叫后需要时间来继续呼叫

时间:2011-05-25 17:07:56

标签: c# .net wcf nhibernate

我开发了一个WCF REST Api,它使用NHibernate作为持久层。我目前正在使用Per-Session服务,但已经读过Per-Call服务是我正在做的事情的方式。

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

  1. 在第一次调用api时,需要20秒才能响应,这可能意味着它正在加载库和实例化类。我可以在任何电话会议之前这样做吗?我已经在ServiceContract实现类上有一个静态构造函数,但它没有减少加载它的时间。

  2. 在后续通话中,如果我停止呼叫该服务约10分钟,则通话时间将再次从1秒变为超过20秒。这是我最关心的问题,因为客户端必须有30秒的超时时间才能让用户看到应用程序崩溃。

  3. 我该如何改进?您是否有任何提高这些服务性能的技巧?

2 个答案:

答案 0 :(得分:1)

似乎是IIS应用程序池回收的明显案例,因此假设您在IIS中托管此WCF服务是合理的。

有几个选择:

  1. 在IIS之外托管服务(WCF can be hosted作为独立的Windows服务)
  2. 调整app pool recycling frequency

答案 1 :(得分:0)

尝试记录Application_Start()和Application_End()以显示应用程序启动和停止的时间。如果这是你的问题,这可以让你知道。

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

如果您认为您的网站会变得更加繁忙,那么您的应用程序停止并始终启动将不会是一个问题。