C# 是否需要在ASP.NET中处理web服务引用?

C# 是否需要在ASP.NET中处理web服务引用?,c#,asp.net,web-services,dispose,C#,Asp.net,Web Services,Dispose,垃圾收集器是否清理web服务引用,或者在我调用完任何方法后是否需要调用服务引用上的dispose?不用担心处理web服务,您可以使用。Web服务是无状态的,因此它们可以在Web服务器上的连接和线程之间安全地共享 下面是一个Web服务类的示例,您可以使用它保存对Web服务实例的引用。这个单例是懒惰和线程安全的。建议您,如果您使您的单例变得懒惰,那么通过遵循相同的逻辑,它们也可以保持线程安全。要了解更多有关如何做到这一点的信息,请阅读关于的C#Depth文章 还要记住,您可能会遇到WCF web服务

垃圾收集器是否清理web服务引用,或者在我调用完任何方法后是否需要调用服务引用上的dispose?

不用担心处理web服务,您可以使用。Web服务是无状态的,因此它们可以在Web服务器上的连接和线程之间安全地共享

下面是一个Web服务类的示例,您可以使用它保存对Web服务实例的引用。这个单例是懒惰和线程安全的。建议您,如果您使您的单例变得懒惰,那么通过遵循相同的逻辑,它们也可以保持线程安全。要了解更多有关如何做到这一点的信息,请阅读关于的C#Depth文章

还要记住,您可能会遇到WCF web服务的问题。我建议大家仔细阅读,特别是关于单身一人的部分,了解更多细节

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(...)


我已经在几个项目中成功地使用了这种模式,并且效果很好,但是正如tvanfosson在下面的评论中提到的,更好的策略是使用DI框架来管理您的web服务实例。

我认为DataService继承了Dispose组件。

您想在这里实现什么

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


MSDN上的示例不调用“Dispose”,垃圾收集器很明显会完成它的工作,因此,除非您使用的实时系统每秒需要在内存中处理100000条以上的记录,否则您可能不需要想出一种方法来处理资源或管理内存

实现IDispose的对象应该手动处理,以帮助垃圾收集器


如果对象的寿命很短,请使用
块。对于可以保留的对象,请确保它们在保留它们的对象也被释放时被释放。

谢谢!“我现在肯定要实施一个using now”。@DanHerbert,我们对你的问题有公开的修订控制。。所以你不需要在你的帖子里塞满一大堆被划掉的东西。这会分散注意力,所以会降低性能?哎呀。好啊重新思考这一点。性能比确保立即释放内存更重要。Dan,当使用单例模式时,Web服务总是线程安全的吗?我正在为第三方web服务编写一个包装器,我是否应该考虑将我的包装器设置为单例?感谢单身汉将使任何使用这种方法的东西都难以测试。更好的方法是注入一个实例,或者更好的方法是在web服务周围封装一个门面,使您的应用程序不受对服务的细微更改的影响。然后让DI框架在请求完成后进行清理。我的问题更多的是从“你应该做”和“你必须做”的角度出发。我主要担心的是内存泄漏,这会随着时间的推移慢慢降低性能。
var ws = WS.MyWebServiceInstance;
ws.MyMethod(...)