簡體   English   中英

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

[英]Do I need to dispose a web service reference in ASP.NET?

垃圾收集器是否清理了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從Component繼承Dispose。

實現IDispose的對象應手動處理以協助垃圾收集器。

如果對象是短暫的,請使用using塊。 對於可以保留的對象,確保它們保留的對象在處理它們時將它們處理掉。

你想在這里完成什么?

如果您擔心性能,那么我會更擔心托管Web服務的服務器的響應能力和網絡速度,因為它們會極大地影響您必須等待Web服務調用完成的時間長度(除非它是異步的)。

MSDN上的示例不要調用'Dispose',而且很明顯垃圾收集器會完成它的工作,所以除非你在一個需要每秒處理超過100,000條記錄的實時系統工作,否則你可能不需要出現用處理資源或管理內存的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM