簡體   English   中英

不再需要時自動關閉TIBCO EMS連接

[英]Auto-closing TIBCO EMS connections when no longer needed

我們正在使用來自ASP.NET 3.5應用程序的TIBCO EMS作為與外部系統的一個接口,並且看起來工作得很好-除了運行另一端的人告訴我們,我們正在瘋狂地建立連接而從未關閉它們。

我正在做的是通過TIBCO ConnectionFactoryConnection本身的具有靜態成員變量的單個類路由所有TIBCO通信,這被告知構造它們非常耗費資源和時間:

private static ConnectionFactory Factory
{
    get
    {
        if (HttpContext.Current.Application["EMSConnectionFactory"] == null)
        {
           ConnectionFactory connectionFactory = CreateTibcoFactory();
           HttpContext.Current.Application["EMSConnectionFactory"] = connectionFactory;
        }

        return HttpContext.Current.Application["EMSConnectionFactory"] as ConnectionFactory;
    }
}

private static Connection EMSConnection
{
    get
    {
        if (HttpContext.Current.Application["EMSConnection"] == null)
        {
           Connection connection = Factory.CreateConnection(*username*,  *password*);
           connection.ExceptionHandler += new EMSExceptionHandler(TibcoConnectionExceptionHandler);
           connection.Start();
           HttpContext.Current.Application["EMSConnection"] = connection;
        }

        return HttpContext.Current.Application["EMSConnection"] as Connection;
     }
 }

現在我的麻煩是:我在哪里以及如何

  • 告訴不再需要TIBCO連接“自動關閉”(例如SqlConnection
  • 錯誤時關閉TIBCO連接
  • 在我們的ASP.NET應用完成(或用戶注銷)之前關閉TIBCO連接

我似乎並沒有從C#/ .NET世界中找到關於如何使用TIBCO EMS的有用信息……任何參與者? 謝謝!!

首先,我不明白您怎么可能用盡連接。 由於將連接存儲在應用程序中,因此整個IIS應用程序應該只具有一個連接。

拋開這些,我將執行以下操作:

  • 檢索連接后,請像現在一樣創建連接。
  • 創建連接后,啟動一個后台線程。
  • DateTime設置為DateTime.Now
  • 讓后台檢查(例如,每秒或每10秒)設置的日期和DateTime.Now之間的區別。 如果那比特定的超時時間長,則Application["EMSConnectionFactory"]連接並將Application["EMSConnectionFactory"]為null; Application["EMSConnectionFactory"] ,將其設置為null。
  • 當后台線程終止連接時,請關閉后台線程;否則,請關閉后台線程。
  • 每次請求連接時,請將DateTime重置to DateTime.Now`。

這樣,連接應自動關閉。

請注意,您將必須引入鎖定。 您可以為此使用Application.Lock()Application.Unlock()

關於關閉錯誤:我看到您已經在連接實例上附加了異常處理程序。 您不能以此關閉連接嗎?

暫無
暫無

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

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