我已经看过几篇关于在IIS中托管WCF服务的文章(即预加载缓存,加载插件等 - 基本上所有昂贵的东西,你不希望你的用户成为当他们发出第一个请求时,他们会四处闲逛),但是当我在.NET服务中自托管WCF时,我还没有看到任何等价物。
有没有人能够做到这一点?
答案 0 :(得分:2)
如果您正在托管服务,则可以在致电ServiceHost.Open并发出“ping”请求后立即为服务创建客户端(即使用ChannelFactory<T>
);这样,如果服务实现正在进行一些繁重的加载,那么它就会发生,而不是在第一个“真正的”客户端请求到达时。
答案 1 :(得分:0)
打开主机后,会加载类型并准备就绪。根据我的经验,延迟通常是创建客户端渠道。昂贵的部分是创建Channel Factory,所以我更喜欢先创建它并使用GetChannel()来进行调用。您还必须在首次连接时协商安全性,以便调整这些设置以找到合适的平衡。
我相信当你在IIS中时,你正在使用WAS服务。该服务的主要特性不会始终使主机保持打开状态,因此您不会为每个空闲服务使用资源,因此在需要时需要时间来加载程序集。自托管一旦启动,就会为您的服务和主机分配所有资源。