问题描述
||
我开发了WCF REST Api,它使用NHibernate作为持久层。我当前使用的是Per-Session服务,但已阅读到Per-Call服务是进行类似操作的方式。
我不喜欢有两件事(可能非常相关),我希望删除它。
首次调用api时,大约需要20秒才能响应,这可能意味着它正在加载库并实例化类。可以在打任何电话之前这样做吗?我在ServiceContract实现类上已经有一个静态构造函数,但是并没有减少它的加载时间。
在随后的通话中,如果我停止拨打该服务约10分钟,则通话时间将从1秒变为超过20秒。这是我最大的担忧,因为客户端必须具有30秒的超时时间,对于用户来说,这可能会使应用程序崩溃。
我该如何改善?您有什么技巧可以改善这些服务的性能吗?
解决方法
似乎很明显有IIS应用程序池回收的情况,因此可以合理地假设您在IIS中托管此WCF服务。
几种选择:
在IIS外部托管服务(WCF可作为独立的Windows服务托管)
调整应用程序池回收频率
,尝试记录您的Application_Start()和Application_End()以显示应用程序启动和停止的时间。如果这是您的问题,这可以给您一个想法。
同样也可能是Session_Start / End类型的东西。
如果您认为您的网站会变得繁忙,那么您的应用程序始终停止运行就不会有什么问题。