1

接続プールをuodotnetで機能させようとしていますが、現在は惨めに失敗しています。接続プールをオフにすると、すべてが期待どおりに機能しますが、オンにすると、次のトレース出力のいずれかでタイムアウトまたはエラーが発生することがよくあります。

2011-03-28T15:09:28 System.Exception: Non-negative number required.
Parameter name: millisecondsTimeout Source: UniObjects Class Method: Boolean ObjWait(Boolean, Int32, System.Object)   at System.Threading.Monitor.ObjWait(Boolean exitContext, Int32 millisecondsTimeout, Object obj)
   at System.Threading.Monitor.Wait(Object obj, Int32 millisecondsTimeout, Boolean exitContext)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniObjects.OpenSession(String hostname, Int32 port_number, String userid, String password, String account, String service, Int32 min_poolsize, Int32 max_poolsize)
   at OurNamespace.UniversePage.OpenSession()
   at OurNamespace.UniversePage.Page_Init(Object sender, EventArgs e)
   at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   at System.Web.UI.Control.OnInit(EventArgs e)
   at System.Web.UI.Page.OnInit(EventArgs e)
   at System.Web.UI.Control.InitRecursive(Control namingContainer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

または:

2011-03-28T15:09:32 System.Exception: [IBM U2][UODOTNET - UNICLIENT][ErrorCode=81015] The connection has timed out Source: UniObjects Class Method: IBMU2.UODOTNET.UniSession FindSession(Int32)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniPool.FindSession(Int32 pTimeout)
   at IBMU2.UODOTNET.UniObjects.OpenSession(String hostname, Int32 port_number, String userid, String password, String account, String service, Int32 min_poolsize, Int32 max_poolsize)
   at OurNamespace.UniversePage.OpenSession()
   at OurNamespace.UniversePage.Page_Init(Object sender, EventArgs e)
   at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   at System.Web.UI.Control.OnInit(EventArgs e)
   at System.Web.UI.Page.OnInit(EventArgs e)
   at System.Web.UI.Control.InitRecursive(Control namingContainer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

すべてのリクエストが失敗するわけではありません(たとえば、負荷テストツールを実行すると、7/20リクエストがタイムアウトの問題で失敗しました)。

セッションはプールに残っているようで、タイムアウト制限(30秒)に達するまで、セッションを作成するための新しい試行が繰り返されています。uodotnet.dllバージョン2.1.1.7196とUniVerseバージョン10.3を使用しています。HP-UXサーバーで実行されています。テストしている開発マシンに単一のライセンスがあり、プールで10個の接続が利用可能です(理論的には!)。ASP.Net Webサイトを作成しており、Page_Load()イベントで新しいセッションを作成します。このセッションはすべてのUniVerseルーチンに渡され、Page_Unload()/ Page_Error()でセッションのcloseを呼び出します。

私たちが間違っていることについて何か考えはありますか?接続プールによってパフォーマンスが向上し、プールがいっぱいの場合は標準メカニズムにフォールバックすると予想しましたが、プールされていないバージョンは20の同時リクエストで正常に機能しますが、プールされたバージョンは定期的に失敗します。アプリケーションのweb.configで接続プールをオンに設定し、MinPoolSizeを1に設定し、MaxPoolSizeを10に設定して、他のすべてをデフォルトのままにします。

4

1 に答える 1

1

これは、UniVerse ライセンスの不足によるものでした。10 個あると思っていましたが、実際には 1 個しかありませんでした。接続プーリング コードを呼び出して、資格のあるライセンスよりも多くのライセンスを要求すると、エラーがスローされますが、接続の試行がタイムアウトした後でのみ発生します。

問題を混乱させるために、UniVerse 10.1 を使用すると、好きなだけ接続できるというバグがありました。所有するライセンス数の制限を強制したのは、10.3 への最近のアップグレードだけでした。

于 2011-03-28T16:13:54.323 に答える