microsoft manage error datos conectar codigos ala c# razor azure-sql-database owin connection-pooling

c# - error - manage azure



"Error: 19-La conexión física no se puede utilizar" con el acceso OWIN en la base de datos de Azure (2)

¡El error 19 no es un error de comunicación! (o no solo un error de comunicación)

Solo asegúrese de tener todas las llamadas requeridas .Include(x=>x.ForeignTable) en su consulta LINQ to SQL.

Actualizado en agosto de 2015 (posible solución para, al menos , algunos escenarios):

Acabamos de tener un caso de repro 100% sobre este problema, que pudimos resolver con pruebas de prueba y error, por lo que bien puede ser una solución o al menos proporcionar pistas sobre qué buscar.

Guión:

  • El error solo ocurrió bajo versiones de lanzamiento que se ejecutan bajo IIS. No ocurrió bajo depuración o bajo IIS Express.
  • También activamos el perfil de SQL para ver cuándo / dónde se tocó el servidor realmente.
  • La consulta en cuestión obtenía registros coincidentes y luego creaba modelos de vista en una iteración foreach de los resultados (es decir, evaluación diferida). El modelo de vista dependía de un valor en una tabla relacionada de la entidad consultada.

Pruebas:

Primer intento: eliminar cualquier filtro complejo en la consulta

  • Resultado: aún falló con el error 19

Segundo intento: agregue ToList() a la consulta para forzar a que la consulta se ejecute hasta su finalización de inmediato.

  • Resultado: exitoso! (obviamente algo está pasando aquí)

Tercer intento: elimine ToList() y agregue .Include(x=>x.ForeignTable) a la consulta para forzar la inclusión de los datos relacionados.

  • Resultado: ¡ éxito !

Mi nueva teoría es:

Si omite accidentalmente una Include de una tabla foránea, EF no obtendrá al azar los datos relacionados cuando evalúe perezosamente. Esto puede conducir al infame error 19.

Como hay relaciones de clave externa en Identify Framework, puede suponer que también falta un .Include() o equivalente en una consulta en algún lugar dentro de OWIN. Esto podría estar causando el problema aleatorio al usar OWIN u otras consultas.

Notas:

  • Un punto clave para llevar es que el error 19 no es un error de comunicación. Las consultas golpean el servidor SQL. Es un problema con el cliente al no obtener datos relacionados.

Haga una pausa para aplaudir (estamos muy contentos de haber encontrado esto) :)

Actualizado el 28 de agosto de 2015:

Acabo de tener el temido Error 19 de nuevo hoy, conectándome a una base de datos SQL local (generalmente esto fue un problema con Azure para mí). En función de los resultados anteriores, simplemente agregué una declaración .Include(x=>x.ForeignTable) donde correspondía y el problema desapareció. Esto parece ser un problema de EF que no siempre puede cargar información de la tabla relacionada con la carga lenta.

He intentado todas las demás publicaciones en el temido "error 19" y encontré que las pocas con respuestas no se aplican o no ayudan, de ahí esta nueva publicación. Este es un problema potencial muy serio para todos los usuarios de Azure + EF.

Primera aparición:

Estoy usando la última versión de todo en un proyecto VS2013 EF6.1 Razor (paquetes enumerados al final). La base de datos está alojada en SQL Azure.

Después de ejecutar mi aplicación web un par de veces (en un entorno de desarrollo) me sale este error: A transport-level error has occurred when receiving results from the server. (provider: Session Provider, error: 19 - Physical connection is not usable) A transport-level error has occurred when receiving results from the server. (provider: Session Provider, error: 19 - Physical connection is not usable)

La línea en la que muere siempre es esta:

Entiendo que el error se relaciona con la agrupación de conexiones (y la falta de conexiones), pero no puedo detectar una fuga en ninguna parte.

Al acceder a la membresía de OWIN y a otras características de la base de datos en toda la aplicación, tengo un DatabaseContoller del que todos los demás controladores heredan. Esto crea todos los componentes relevantes y los descarta.

DatabaseController.cs

[Authorize] public class DatabaseController : Controller { #region properties /// <summary> /// User manager - attached to application DB context /// </summary> protected UserManager<ApplicationUser> UserManager { get; set; } /// <summary> /// Role manager - attached to application DB context /// </summary> protected RoleManager<IdentityRole> RoleManager { get; set; } /// <summary> /// Application DB context /// </summary> protected ApplicationDbContext ApplicationDbContext { get; set; } /// <summary> /// Database context used by most controllers /// </summary> protected ApplicationEntities Context { get; set; } #endregion properties #region Constructors public DatabaseController() { this.Context = new ApplicationEntities (); this.ApplicationDbContext = new ApplicationDbContext(); this.UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(this.ApplicationDbContext)); this.RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(this.ApplicationDbContext)); this.UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false }; } #endregion Constructors protected override void Dispose(bool disposing) { if (disposing) { if (UserManager != null) { this.UserManager.Dispose(); this.UserManager = null; } if (this.RoleManager != null) { this.RoleManager.Dispose(); this.RoleManager = null; } if (this.ApplicationDbContext != null) { this.ApplicationDbContext.Dispose(); this.ApplicationDbContext = null; } if (this.Context != null) { this.Context.Dispose(); this.Context = null; } } base.Dispose(disposing); } }

Paquetes instalados

<package id="Antlr" version="3.5.0.2" targetFramework="net45" /> <package id="bootstrap" version="3.1.1" targetFramework="net45" /> <package id="EntityFramework" version="6.1.0" targetFramework="net45" /> <package id="jQuery" version="1.11.0" targetFramework="net45" /> <package id="jQuery.Validation" version="1.11.1" targetFramework="net45" /> <package id="json2" version="1.0.2" targetFramework="net45" /> <package id="Microsoft.AspNet.Identity.Core" version="2.0.0" targetFramework="net45" /> <package id="Microsoft.AspNet.Identity.EntityFramework" version="2.0.0" targetFramework="net45" /> <package id="Microsoft.AspNet.Identity.Owin" version="2.0.0" targetFramework="net45" /> <package id="Microsoft.AspNet.Mvc" version="5.1.1" targetFramework="net45" /> <package id="Microsoft.AspNet.Razor" version="3.1.2" targetFramework="net45" /> <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net45" /> <package id="Microsoft.AspNet.WebApi" version="5.1.2" targetFramework="net45" /> <package id="Microsoft.AspNet.WebApi.Client" version="5.1.2" targetFramework="net45" /> <package id="Microsoft.AspNet.WebApi.Core" version="5.1.2" targetFramework="net45" /> <package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.2" targetFramework="net45" /> <package id="Microsoft.AspNet.WebPages" version="3.1.2" targetFramework="net45" /> <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.1.2" targetFramework="net45" /> <package id="Microsoft.Owin" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Cookies" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Facebook" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Google" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.MicrosoftAccount" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.OAuth" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Twitter" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" /> <package id="Modernizr" version="2.7.2" targetFramework="net45" /> <package id="Newtonsoft.Json" version="6.0.2" targetFramework="net45" /> <package id="Owin" version="1.0" targetFramework="net45" /> <package id="Owin.Security.Providers" version="1.3.1" targetFramework="net45" /> <package id="Respond" version="1.4.2" targetFramework="net45" /> <package id="WebGrease" version="1.6.0" targetFramework="net45" />

Suponiendo que es una fuga de conexión, ¿cómo puedo rastrear el origen de la fuga?

Si necesita más información, solo pregunte.

Actualización: 22 de mayo de 2014 Se ofreció Second Bounty

Todavía tengo el mismo problema, con algunos cambios leves del proyecto realizados desde la última publicación, por lo que publicaremos los últimos detalles a continuación en breve.

He agregado Connection Lifetime=3;Max Pool Size=3; a mis cadenas de conexión, basadas en esta publicación .

Actualización: 23 de mayo de 2014 Se sigue produciendo un error

Al día siguiente, después de la depuración unas pocas docenas de veces, este error volvió.

Actualización: 11 de junio de 2014

Después de 2 recompensas e innumerables investigaciones de Google (ninguna respuesta real a esto), tengo que asumir que es un defecto en Entity Framework 6, que de alguna manera estoy causando que aparezca.

Más información:

Acabo de tener el mismo error en un proyecto de WinForm, conéctese a Azure. En este caso, accidentalmente no estaba borrando una lista de entidades después de que se agregaron 20 elementos nuevos.

Cada vez que se ejecutó el código, agregó 20 registros más y actualizó el campo DateModified en todos ellos. En el momento en que llegó a 1700 registros que se actualizaban, repentinamente dio el temido "error 19: la conexión física no se puede usar". Después de eso tuve que reiniciar mi Debug IIS para que funcione.

Obviamente, el código había corrido una gran cantidad de actualizaciones, y tal vez algo sobre esto ayude a alguien a pensar en algo .