0

私はashxファイルに次のコードを持っています-理由を聞かないでください;-)

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

1 に答える 1

4

これはInvalidOperationExceptionのデフォルトのエラーメッセージであるため、この場合に重要な意味があるとは思わないでください...明らかにOracleは明示的なエラーメッセージを作成しませんでした。

Reflectorによると、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();
}

したがって、接続プールがない場合は明らかにこの例外がスローされ、それをチェックする方法がわかりません...したがって、最終的に唯一のオプションは例外をキャッチすることです

于 2009-08-17T17:02:07.013 に答える