所以有人(好吧是我)没有意识到你需要在使用 WCF 代理后关闭它们。
这有多糟糕?会造成什么样的问题。
是否只是因为垃圾收集而延迟关闭资源 - 还是我真的应该担心过早的应用程序池回收之类的事情?
在这个问题上,我实际上拥有比 WCF 代理更多的 ASMX - 所以同样的问题也适用于 ASMX。
显然,既然我知道了这一点,我将逐步修复它,但希望能提供关于这到底有多糟糕的意见?
WCF 服务具有默认超时。如果你不关闭它,服务会一直等到超时。
WCF 还具有最大并发调用数,默认值为 10。
因此,如果您不关闭连接,则每分钟只能进行 10 次通话。(假设默认设置)
这是有类似问题的人:
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/d58ee1c6-032b-40f3-b734-6628f3991bb2/
您可以安全地重用 WCF 连接,只需额外注意检查它是否处于故障状态。
作为一般指南,当您希望逐步解决此问题时,不要用 using 语句包装您的代理,我见过很多人这样做,直到我读到IDesign的一篇文章,这样做可能导致 Dispose 抛出异常并屏蔽真正的异常,在 try/catch 中显式关闭您的代理,如果关闭导致异常,请使用 Abort 进行资源清理。
编辑:正如下面的评论所指出的,这适用于 WCF 代理。