2011-06-21 204 views
2

我见过几篇关于在IIS中托管WCF服务时进行预热的文章(即预加载缓存,加载插件等) - 基本上所有的昂贵的东西不希望用户在发出第一个请求时徘徊),但是我没有看到WCF在.NET服务中自托管时的任何等效内容。预热自我托管的WCF服务

有没有人能够做到这一点?

+0

你能举一些例子吗?为什么自助服务中的流程会有所不同? – mellamokb

+0

由于在自托管的环境中,您自己创建了“ServiceHost”并且已经打开它,实际上不需要“预热” - 这与IIS按需创建ServiceHost类以满足请求不同,在这里,热身可以帮助在第一次请求进入之前提前创建ServiceHost的第一个实例 –

回答

2

如果您要托管服务,则可以在调用ServiceHost.Open并发出“ping”请求之后,为服务创建客户端(即使用ChannelFactory<T>);这样,如果服务实现正在执行一些繁重的加载操作,那么可能会发生,而不是第一个“真正的”客户端请求到达时。

+0

Hacky,但我猜测它可行! –

0

主机打开后,类型会被加载,您就可以开始了。根据我的经验,延迟通常会创建客户频道。昂贵的部分是创建Channel Factory,所以我更愿意先创建并为我的通话使用GetChannel()。您还必须在首次连接时协商安全,以便您可以调整这些设置以找到合适的平衡。

我相信当你在IIS中时,你正在使用WAS服务。该服务的主要功能并不是始终保持主机打开状态,因此不会为每个空闲服务使用资源,因此在需要时需要时间加载程序集。自启动时,自托管会将所有资源分配给您的服务和主机。

+0

我登录了WCF服务中的热身代码;当承载服务的.NET服务启动时,该代码肯定不会被调用,而是当第一个客户端发出第一个请求时。 –