2009-08-17 50 views
0

私はASHXファイルに次のコードを持っている - と呼ばれる;-)OracleConnection.ClearAllPools - 操作が原因オブジェクトの現在の状態に有効ではありません

<%@ WebHandler Language="C#" Class="Site.Pool" %> 

using System; 
using System.Data; 
using System.IO; 
using System.Web; 
using System.Web.SessionState; 

using Core.Database; 
using Core.ITables; 
using Online.Server.Busi; 
using Online.Server.ITables; 
using XactNet.Busi; 

namespace Site 
{ 
    public class Pool : IHttpHandler, IRequiresSessionState 
    { 
      public void ProcessRequest(HttpContext context) 
      { 
      try 
      { 
       Oracle.DataAccess.Client.OracleConnection.ClearAllPools(); 
       context.Response.Write("SUCCESS"); 
      } 
      catch (Exception e) 
      { 
       context.Response.Write(e.ToString()); 
      } 

     } 

      public bool IsReusable 
      { 
       get { return false; } 
     } 
     } 
} 

は、例外が取得する理由は聞かないでください書きました:

System.InvalidOperationException: Operation is not valid due to the current state of the object. 
at Oracle.DataAccess.Client.OracleConnection.ClearAllPools() 
at Site.Pool.ProcessRequest(HttpContext context) 

接続プールをクリアする前に、どの状態にする必要がありますか?

おかげで、

答えて

4

これは、InvalidOperationExceptionが、デフォルトのエラーメッセージが表示され、それはこの場合のいずれかの重要な意味を持っていると仮定していない...どうやらOracleは、明示的なエラーメッセージを書くために気にしませんでした。

ここClearAllPoolsメソッドのコードは、リフレクターによると、です:何も接続プールがない場合

public static void ClearAllPools() 
{ 
    if (!OracleInit.bSetDllDirectoryInvoked) 
    { 
     OracleInit.Initialize(); 
    } 
    if (((ConnectionDispenser.m_ConnectionPools == null) || (ConnectionDispenser.m_ConnectionPools.Count == 0)) && ((ConnectionDispenser.m_htSvcToRLB == null) || (ConnectionDispenser.m_htSvcToRLB.Count == 0))) 
    { 
     throw new InvalidOperationException(); 
    } 
    ConnectionDispenser.ClearAllPools(); 
} 

だからどうやらそれは、この例外をスローし、私はそれを確認する手立てを見ていない...そう、最終的唯一のオプションは、例外をキャッチすることです

+0

ええ、私はリフレクターでも同様にそれを開いた。私は当時の接続プールを持っていなかった理由は考えられません(おそらく、私がそこにashxファイルを置いたときにアプリケーションを再起動しました...) – ConsultUtah

関連する問題