none
Problema acceso a datos Linq & singleton RRS feed

  • Pregunta

  • Buenas, en una aplicación web, multicapa estamos teniendo problemas relacionados con la conexión a sql.

    La misma en el momento que comienza el error loguea esto "The requested operation cannot be completed because the connection has been broken."

    El problema aparece cuando hay transacciones (Utilizamos TransactioScope) de por medio, pero no sabemos el motivo exacto ya que puede funcionar bien todo un día o más y luego aparecer el error los días siguientes.

    El proyecto contiene una capa de datos Linq y se utilizan stores procedures mapeados en un dbml. Utilizamos un singleton static para la conexion de esta manera:

        static class DBFactory<DC> where DC : DataContext, new()
        {
    
            private static DC _baseDatos;
    
            public static DC ObtenerBaseDatos
            {
                get
                {
                    if (_baseDatos == null)
                    {
                        _baseDatos = new DC();
                    }
                    return _baseDatos;
                }
            }
        }


    El tema es que debo reiniciar el IIS cada vez que aparece el error ya que no se puede seguir trabajando. Esto es algo que ya está en PRODUCCIÓN y pensé en cambiar todo el acceso a datos, por lo menos quitar el singleton y crear y destruir la conección mediante un using{}, ya que probé miles de formas y no puedo conseguir la solución.

    Alguién que me pueda dar una mano o que le haya pasado algo parecido.

    Muchas gracias

    miércoles, 15 de octubre de 2014 20:46

Respuestas

  • hola

    porque mantienen el contecto siempre instanciado, la verdad no lo aconsejaria, una variable static actua como el objeto Application o sea esta activo para el sitio

    deberias crear la instancia del contexto y que solo este activo para el request nada mas

    en resumen definir el contexto en una variable static no lo veo correcto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 15 de octubre de 2014 20:58

Todas las respuestas

  • hola

    porque mantienen el contecto siempre instanciado, la verdad no lo aconsejaria, una variable static actua como el objeto Application o sea esta activo para el sitio

    deberias crear la instancia del contexto y que solo este activo para el request nada mas

    en resumen definir el contexto en una variable static no lo veo correcto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 15 de octubre de 2014 20:58
  • Hola,

    Es muy genérica la respuesta que puedo darte... en este link tenes la información de Microsoft en Español sobre el problema y varias soluciones posibles.

    Si te sirve por favor marca la pregunta como respondida.

    Saludos y éxitos,

    http://support2.microsoft.com/kb/973256?wa=wsignin1.0

    Daniel S.


    MCTS - MCP - MST - New Technologies Evangelist

    miércoles, 15 de octubre de 2014 20:59
  • Gracias Leandro, el tema es que nosotros desde la capa lógica quizás desde una método abrimos una transacción y llamamos a otros n métodos que hacen 1 acción en la BD. Si quito la variable estática y le creo una instancia en la dataLayer por cada método que se ejecuta dentro de la transacción voy a tener un error por usar múltiples conexiones en una transacción.

    Se me hace que tendría que instanciar el contexto desde la capa lógica. 

    Que opinas Leandro?

    Muchas gracias por tu ayuda.

    Diego


    El cholo

    jueves, 16 de octubre de 2014 12:27
  • Daniel gracias por responder pero estamos usando el framework 3.5 y el artículo es para el 2. Igualmente el caso no es el mismo que ahí se describe.

    Saludos


    El cholo

    jueves, 16 de octubre de 2014 12:29