c# - 我是否需要在 ASP.NET 中配置 Web 服务引用?

标签 c# asp.net web-services dispose

垃圾收集器是否会清理 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/

相关文章:

c# - 使用正则表达式处理异常的问题

c# - 将数据库上下文移动到 DAL 类库后的 .Net Core 2.0 Web Api 循环依赖

c# - Roslyn C# 脚本沙箱

c# - 分块读取流失败 - 目标数组不够长

c# - 使用 Silverlight/IIS 的双工轮询的可扩展性

c# - Windows 手机 : RemoveBackEntry after navigate failing

c# - 如何使用 Rhino 模拟设置 stub 和分配网络响应

asp.net - 找不到类型 'RestService.weddingservice',在 ServiceHost 指令中作为服务属性值提供

javascript - 在 ng-grid 中显示 json 复杂字符串

java - 调用 Jersey 服务 (PUT) 时发送电子邮件通知的设计问题