我有winform应用程序,我从外部Web服务填充自动完成框。它基于devexpress textedit,具有很好的功能来激活缓冲的onedit事件(每次用户输入字符时都不会触发)。 什么是创建wcf频道时的最佳做法,我应该优雅地做什么,并且每次onedit事件(仍然大约1s周期)创建新频道并关闭它或更好地使用一个频道进行整个会话(形式生命周期)?
答案 0 :(得分:0)
最安全要做的是为每次通话重新创建频道。
为什么呢?考虑一下这种情况,即你有一个长寿的"客户端上的频道。如果(无论出于何种原因)通道发生故障,则通道无法使用。如果您想再次使用服务,则必须编写代码来检测通道何时出现故障,将其撕下然后重新创建。您还需要记住在应用程序关闭之前丢弃您的频道。对我来说,这给您的编程模型带来的复杂性足以为每次调用重建频道。
对this similar question的回答请注意,通过保持频道开放,您将在客户端上持有资源 - 更好的是在不再需要时立即处理资源。对于一台计算机,1秒就是一个年龄 - 你不想在这个时候拿着你不需要的资源。
但是,你当然希望缓存用于创建频道的ChannelFactory
- 但是一旦你有了这个,底层频道的创建便宜。