2009-08-17 2 views
0

je le code suivant dans un fichier ashx - ne demandez pas pourquoi ;-)OracleConnection.ClearAllPools - opération n'est pas valide en raison de l'état actuel de l'objet

<%@ 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; } 
     } 
     } 
} 

Lorsqu'elle est appelée, l'exception obtient écriture:

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) 

Des suggestions quant à l'état dans lequel les pools de connexion doivent être avant d'essayer de les effacer?

Merci,

Répondre

4

Ceci est le message d'erreur par défaut pour InvalidOperationException, donc ne présumez pas qu'il a un sens important dans ce cas ... apparemment Oracle n'a pas pris la peine d'écrire un message d'erreur explicite.

Voici le code de la méthode ClearAllPools, selon réflecteur:

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(); 
} 

Donc, apparemment, il jette cette exception quand il n'y a pas de piscine de connexion, et je ne vois aucun moyen de vérifier que ... donc finalement la seulement l'option est d'attraper l'exception

+0

Ouais, je l'ai ouvert dans le réflecteur et j'ai vu la même chose. Aucune idée de pourquoi je n'avais pas de pool de connexion à ce moment là (peut-être que l'application a redémarré quand j'ai mis le fichier ashx dehors ...) – ConsultUtah

Questions connexes