WCF在一段时间内未调用它之后,需要一些时间才能继续调用

本文关键字:调用 时间 继续 一段时间 之后 WCF | 更新日期: 2023-09-27 17:57:51

我开发了一个WCF REST Api,它使用NHibernate作为持久层。我目前正在使用"每次会话"服务,但我读到"每次呼叫"服务是我正在做的事情的一种方式。

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

  1. 在对api的第一次调用中,大约需要20秒才能做出响应,这可能意味着它正在加载库并初始化类。我可以在打电话之前这样做吗?我已经在ServiceContract实现类上有了一个静态构造函数,但这并没有减少它的加载时间。

  2. 在随后的通话中,如果我停止呼叫该服务约10分钟,通话时间将从1秒再次增加到20秒以上。这是我最担心的问题,因为客户端必须有30秒的超时时间,对于用户来说,这可能意味着应用程序已经崩溃。

我该如何改进?你对提高这些服务的性能有什么建议吗?

WCF在一段时间内未调用它之后,需要一些时间才能继续调用

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

几个选项:

  1. 在IIS之外托管服务(WCF可以作为独立的Windows服务托管)
  2. 调整应用程序池回收频率

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

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

如果你认为你的网站会变得更忙,那么你的应用程序一直停止和启动就不会是一个问题。