La aplicación se bloquea al acceder a la base de datos

asp.net-mvc c# dapper iis windows-server-2012-r2

Pregunta

Tengo una pequeña aplicación web que funciona bien en mi PC, pero cuando la publico en el servidor, la aplicación falla al consultar la base de datos.

Lo he reducido a esta línea:

output = (List<Pallet>)db.Query<Pallet>(query, args);

Donde estoy usando Dapper para consultar una tabla.

Normalmente, cuando ocurre un error, me lleva a la página de errores compartidos de ASP, pero aquí solo obtengo un This site can’t be reached ERR_CONNECTION_RESET en Chrome.

También noté que en el visor de eventos aparece un error de aplicación con el ID de evento de 100 :

Faulting application name: w3wp.exe, version: 8.0.9200.16384, time stamp: 0x5010885f
Faulting module name: mso30win32client.dll, version: 16.0.4266.1001, time stamp: 0x55ba12f1
Exception code: 0xc0000005
Fault offset: 0x00088092
Faulting process id: 0x35a4
Faulting application start time: 0x01d2cce79551069b
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\Program Files (x86)\Common Files\Microsoft Shared\Office16\mso30win32client.dll
Report Id: f044a40f-38da-11e7-9402-a4bf011a3e0b
Faulting package full name: 
Faulting package-relative application ID: 

Este es el método en GrvController :

public ActionResult Details(string grvNumber)
{
    var pallets = access.GetPallets(grvNumber);

    var grv = new Grv(pallets);
    Session["grv"] = grv;

    return View(grv);
}

Y Access.GetPallets :

internal List<Pallet> GetPallets(string grvNumber)
{
    using (var db = new OleDbConnection(ConnectionString))
    {
        var query = Constants.GetGrvQuery;
        var args = new DynamicParameters();
        args.Add("@grv", grvNumber);

        var output = new List<Pallet>();
        try
        {
            output = (List<Pallet>)db.Query<Pallet>(query, args);
        }
        catch (Exception e)
        {
            Log.Debug(e.Message);
        }
        return output;
    }
}

Tenga en cuenta que la Exception e nunca se detecta, y la aplicación simplemente se bloquea después de un retraso.

¿Alguien ha experimentado esto antes? ¿Alguien sabe cómo puedo hacer para depurar esto?

Gracias por adelantado.


Actualizar

Traté de cambiar mi método GetPallets para ver si el problema era específico de Dapper , pero está haciendo lo mismo cuando se llama a OleDbConnection.Open() .

También noté que en mi visor de eventos, hay un flujo constante de este error de aplicación:

Login failed for user 'NT AUTHORITY\NETWORK SERVICE'. Reason: Could not find a login matching the name provided. [CLIENT: <named pipe>]

desde la fuente MSSQL $ MICROSOFT ## WID . ¿Podría ser que esto esté relacionado de alguna manera?

Mi aplicación está configurada para usar una cuenta de servicio creada en AD.


Actualización 2

Gracias a los comentarios de Austins, creo que se ha reducido aún más a ser algún tipo de problema de permisos con una base de datos interna de MS. Cuando cambio la aplicación web que se ejecute como administrator en lugar de mi serviceQC cuenta, puede acceder a la base de datos sin ningún problema.

Sin embargo, esta no es, por supuesto, una buena práctica. Traté de agregar todos los grupos en la pestaña "miembro de" del administrator en AD a serviceQC , pero eso no ayuda. ¿Alguien sabe cómo puedo otorgar acceso a la base de datos MSSQL $ MICROSOFT ## WID para un usuario específico?

Respuesta aceptada

Después de jugar con esto por un tiempo, encontré la siguiente opción en IIS

Application Pool -> Advanced Settings -> Load User Profile

Donde la descripción es

[loadUserProfile] Esta configuración especifica si IIS carga el perfil de usuario para una identidad de grupo de aplicaciones. Cuando este valor es verdadero, IIS carga el perfil de usuario para la identidad del grupo de aplicaciones. Establezca este valor en falso cuando requiera el comportamiento de IIS 6.0 de no cargar el perfil de usuario para la identidad del grupo de aplicaciones.

Después de configurar esto en True , mi aplicación ahora puede interactuar con la base de datos.

Extrañamente, después de cambiar esto de nuevo a falso (necesitaba asegurarme de que esta era la causa), la aplicación ahora ya no se cuelga, sino que simplemente devuelve una List<Pallet> vacía de la base de datos (no parece arrojar un error) .

Encontré esta respuesta que explica algo de lo que está sucediendo, pero como menciona uno de los comentarios, establecer esta opción probablemente tenga algunas implicaciones de seguridad y rendimiento.

Asumo que debe haber alguna otra forma de resolver mi problema, pero por ahora esto tendrá que hacer.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué