Question

Nous essayons d'obtenir la regroupement de connexions en travaillant avec Uodotnet et échouant actuellement misérablement. Lorsque nous désactivons la mise en commun des connexions, tout fonctionne comme prévu, mais lorsque nous l'allumons, nous obtenons souvent des délais ou des erreurs avec l'une des sorties de trace suivantes:

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)

Ou:

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)

Toutes les demandes échouent (par exemple, lors de l'exécution d'un outil de test de chargement, les demandes 7/20 ont échoué avec le problème du délai d'expiration).

Il semble que les sessions restent dans le pool et de nouvelles tentatives pour créer une session se répète jusqu'à ce que la limite de délai d'expiration soit atteinte (30 secondes). Nous utilisons uodotnet.dll version 2.1.1.7196 et Universe version 10.3. Exécution sur un serveur HP-UX. Nous avons une licence unique sur la machine de développement sur laquelle nous testons avec 10 connexions disponibles dans la piscine (théoriquement!). Nous écrivons un site Web ASP.NET, et nous créons une nouvelle session dans l'événement Page_Load () qui est transmise à toutes les routines d'univers, puis appelons Fermer sur la session dans page_unload () / page_error ().

Des idées sur ce que nous faisons de mal? Nous nous attendions à ce que la mise en commun des connexions améliorerait les performances, se repliant sur le mécanisme standard si la piscine était pleine, mais alors que la version non polaire fonctionne bien avec 20 demandes simultanées, la version regroupée échoue régulièrement. Nous avons défini le regroupement de connexion dans le web.config de l'application, en définissant MinpoolSize sur 1 et MaxPoolSize sur 10, laissant tout le reste aux valeurs par défaut.

Était-ce utile?

La solution

Cela était dû à un manque de licences d'univers. Nous pensions que nous en avions 10, mais en fait, nous n'avions que 1. Appeler le code de mise en commun des connexions demandant plus de licences que nous avons le droit de lancer une erreur, mais uniquement après que la tentative de connexion n'a chronométré.

Juste pour confondre les choses, en utilisant l'univers 10.1, il y avait un bogue qui signifiait que vous pouviez avoir autant de connexions que vous le souhaitez, ce n'était qu'une mise à niveau récente à 10.3 qui a appliqué la limite du nombre de licences que vous possédez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top