垃圾收集器是否会清理 Web 服务引用,或者我是否需要在完成调用任何方法后调用服务引用上的处置?
最佳答案
不必担心处理您的网络服务,您可以只保留每个网络服务的一个实例,使用 singleton pattern . Web 服务是无状态的,因此它们可以在 Web 服务器上的连接和线程之间安全地共享。
这是一个 Web 服务类的示例,您可以使用它来保存对您的 Web 服务实例的引用。这个单例是惰性和线程安全的。建议如果你让你的单例变得懒惰,那么它们也可以通过遵循相同的逻辑来保持线程安全。要了解有关如何执行此操作的更多信息,请阅读 Implementing Singletons 上的 C# 深入文章。 .
另请记住,您可能会遇到 WCF 网络服务问题。我建议阅读 WCF's instance management techniques article ,特别是单例部分,了解更多详细信息。
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;
}
}
}
然后当您需要访问您的网络服务时,您可以这样做:
WS.MyWebServiceInstance.MyMethod(...)
或
var ws = WS.MyWebServiceInstance;
ws.MyMethod(...)
我已经在几个项目中成功地使用了这种模式并且效果很好,但正如 tvanfosson 在下面的评论中提到的,更好的策略是使用 DI 框架来管理您的 Web 服务实例。
关于c# - 我是否需要在 ASP.NET 中配置 Web 服务引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/429478/