Solución:
La causa más común de esto que conozco es no manejar correctamente los objetos IDisposable asociados con Oracle.DataAccess.Client.
Probablemente haya algún código que tenga por ahí que no esté eliminando correctamente algunos objetos. Esto hará que Oracle se aferre a las conexiones que en realidad no están en uso, lo que provocará que se agoten las conexiones disponibles en el grupo. Reiniciar IIS lo resuelve porque mata todas esas conexiones.
Revise su código cuidadosamente y asegúrese de que todos los objetos IDisposable se eliminen o encapsulen correctamente en las declaraciones de uso.
Los problemas de conexión más comunes que he visto son:
- La aplicación deja abiertas las conexiones. Esto está agotando todas las conexiones disponibles, por lo que las conexiones se rechazan aleatoriamente. La solución de código más fácil para esto es asegurarse de que la aplicación cierre las conexiones lo más rápido posible (en lugar de esperar a que las variables abandonen el alcance). Una instrucción “using” en .NET funciona bien para esto.
- Es posible que su grupo de conexiones deba reciclarse. Puede consultar este sitio para obtener más información: http://docs.oracle.com/cd/E11882_01/java.112/e12265/manage.htm#BABICIII
- Es posible que no tenga un grupo de conexiones lo suficientemente grande (el tamaño máximo predeterminado es 100). Intente aumentar esto.
Otro sitio que podría ayudar es este: http://blog.ilab8.com/2011/09/02/odp-net-pooling-and-connection-request-timed-out/
La clave es llamar a .Dispose () en su DbContext y / o asegurarse de que su contenedor llame a .Dispose () por usted (anulando dispose y asegurándose de que para cada nuevo DbContext tenga una llamada correspondiente a .Dispose ()) .
Es posible que desee usar el destructor ~ MyDbContext () como un truco rápido solo para verificar que llamar a Dispose () solucionará el problema en el que su aplicación deja las conexiones abiertas (es decir, no llama a Dispose () en su DbContext).
Parece que con el proveedor de Oracle DEBE llame a Dispose usted mismo (o haga que el contenedor lo haga por usted), de lo contrario, se perderán las conexiones.
¿Puedo proporcionar un código de ejemplo si lo desea?