2

ASP.NET3.5アプリのTIBCOEMSを、外部システムへの1つのインターフェイスに使用していますが、正常に機能しているように見えます。それらを閉じる....

私が行っているのは、TIBCOConnectionFactoryConnectionそれ自体の両方の静的メンバー変数を使用して、すべての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の世界からTIBCOEMSを使用する方法について、あまり役立つ情報が見つからないようです。ありがとう!!

4

1 に答える 1

1

まず、接続が不足する可能性がある方法がわかりません。接続をアプリケーションに保存しているため、IISアプリケーション全体に対して1つの接続のみが必要です。

それはさておき、私は次のことをします:

  • 接続が取得されたら、今と同じように接続を作成します。
  • 接続を作成したら、バックグラウンドスレッドを起動します。
  • DateTimeaをDateTime.Now;に設定します。
  • 設定した日付との違いをバックグラウンドで確認します(たとえば、1秒ごとまたは10秒ごと)DateTime.Now。それが特定のタイムアウトよりも長い場合は、接続を切断しApplication["EMSConnectionFactory"]てnullに設定します。
  • バックグラウンドスレッドが接続を切断したら、バックグラウンドスレッドを閉じます。
  • 接続が要求されるたびに、DateTimeDateTime.Now`をリセットしtoます。

このように、接続は自動的に閉じられる必要があります。

ロックを導入する必要があることに注意してください。Application.Lock()とを使用できますApplication.Unlock()

エラーの終了について:接続インスタンスに例外ハンドラーがアタッチされているようです。それとのつながりを閉じられませんか?

于 2010-10-26T17:10:10.073 に答える