我是否需要在ASP.NET中部署Web服务引用?

垃圾收集器是否清理了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服务实例。

我认为DataService从ComponentinheritanceDispose。

实现IDispose的对象应手动处理以协助垃圾收集器。

如果对象是短暂的,请使用using块。 对于可以保留的对象,确保它们保留的对象在它们被丢弃时将它们处理掉。

你想在这里完成什么?

如果您担心性能,那么我会更担心托管Web服务的服务器的响应能力和网络速度,因为它们会极大地影响您必须等待Web服务调用完成的时间长度(除非它是异步的)。

MSDN上的示例不要调用’Dispose’,而且很明显垃圾收集器会完成它的工作,所以除非你在一个需要每秒处理超过100,000条记录的实时系统工作,否则你可能不需要出现以一种处理资源或管理内存的方式。