我创建了一个托管在Windows服务中的简单WCF服务。 WCF服务在Windows服务启动时自动启动,但是当我第一次从客户端连接到WCF服务时需要几秒钟(与任何其他WCF服务一样)。
我知道如何在IIS上托管服务时避免此延迟,但在其他任何内容托管服务时却不知道。
确切地说:
有没有办法唤醒托管在一个中的WCF服务 没有客户端要求的Windows服务吗?可能来自windows服务代码?
答案 0 :(得分:3)
使用IIS托管时,延迟不是因为WCF服务需要“唤醒”。在IIS托管中发生这种情况的原因是IIS将在一段时间不活动(或由于某些其他内部状态)后从内存中卸载应用程序池。这不适用于Windows服务托管。
您遇到的延迟可能是因为当您的客户首次呼叫该服务时,它必须启动一个wcf频道才能进行呼叫。然后可以使用相同的通道进行后续调用,因此没有提前期。
要防止此行为,您必须始终保持频道开启。有几种方法可以做到这一点,但最简单的方法是使用会话。有关详细信息,请参阅Erik Funkenbusch的优秀answer。但是,你应该考虑是否绝对需要这个,因为会话是一个开销,并且不能很好地扩展。