垃圾收集器是否清理了Web服务引用,或者在调完我调用的任何方法后,是否需要在服务引用上调用dispose?
您可以使用单例模式仅保留每个Web服务的单个实例,而不必担心处理Web服务.Web服务是无状态的,因此可以安全地在Web服务器上的连接和线程之间共享它们.
以下是可用于保存对Web服务实例的引用的Web Service类的示例.这个单例是懒惰和线程安全的.建议如果你使单身人员懒惰,他们也会遵循相同的逻辑保持线程安全.要了解有关如何执行此操作的更多信息,请阅读有关实现单例的C#In Depth文章.
另请注意,您可能会遇到WCF Web服务的问题.我建议阅读WCF的实例管理技术文章,特别是单例部分,以获取更多详细信息.
public static class WS { private static object sync = new object(); private static MyWebService _MyWebServiceInstance; public static MyWebService MyWebServiceInstance { get { if (_MyWebServiceInstance == null) { lock (sync) { if (_MyWebServiceInstance == null) { _MyWebServiceInstance= new MyWebService(); } } } return _MyWebServiceInstance; } } }
然后,当您需要访问Web服务时,您可以执行以下操作:
WS.MyWebServiceInstance.MyMethod(...)
要么
var ws = WS.MyWebServiceInstance; ws.MyMethod(...)
我已经在几个项目中成功使用了这种模式并且运行良好,但正如tvanfosson在下面的评论中提到的,更好的策略是使用DI框架来管理您的Web服务实例.