urlmon.dll FindMimeFromData () funciona perfectamente en la consola / escritorio de 64 bits pero genera errores en ASP.NET

Estoy creando una biblioteca de utilidades que se utilizarán tanto en el entorno de escritorio como en un entorno web.

Contiene varias características que creo que a menudo se repiten en mis aplicaciones, incluida la utilidad para obtener el tipo mime de un archivo por su contenido (no la extensión).

Los archivos que tendré que revisar son los más comunes (jpg, png, pdf, txt), así que elegí usar el método externoFindMimeFromData (enlace arriba)

Usando .NET, ¿cómo puede encontrar el tipo mime de un archivo basado en la firma del archivo y no en la extensión?

El método funciona bien, a excepción de los dos tipos mime incorrectos de JPG (image/pjpg) y PNG (image/x-png), resuelto fácilmente haciendo un cheque antes de la declaración de devolución.

La biblioteca se compila para la plataforma AnyCPU, ya que debe instalarse en servidores / clientes en 32 y 64 bits.

En el momento de las pruebas en el entorno de escritorio, todo funcionaba correctamente para ambas aplicaciones compiladas para x86 y x64.

en el momento de probar una aplicación ASP.NET (un sitio vacío con un controlador http para la prueba) se produce un error de tipo HRESULT, y el depurador me dice que no puede proporcionar más información.

Después de algunas configuraciones de prueba, incluido el cambio de la identidad de la agrupación al sistema local (sin resultado), he identificado el problema:

el grupo debe permitir aplicaciones de 32 bits (ver imagen arriba).

¿Por qué?

No debe cargar el dllurlmon.dll del sistema de 64 bits donde estamos ahora?

Este es un gran problema, porque laFindMimeFromData El método puede ser invocado por todas partes en esta biblioteca:

el resultado es que una invocación de este método por otro método de utilidad puede generar esta excepción y dificultar el seguimiento del problema también a través de la depuración.

¿Alguna idea / experiencia?

Sistemas operativos utilizados para la prueba

Escritorio:

Windows 8 x64 -trabajosWindows 7 x64 -trabajosWindows Server 2008 Standard R2 x64 -trabajosWindows Server 2008 Standard x86 -trabajosWindows Server 2003 Standard x86 -trabajosWindows XP Professional SP3 -trabajos

Web:

Windows 8 x64 -Primer error encontrado, funciona solo con la aplicación de 32 bits habilitadaWindows Server 2008 Standard R2 x64 -error confirmado, funciona solo con la aplicación de 32 bits habilitadaWindows Server 2008 Standard x86 -trabajos

EDIT 2 (pregunta resuelta)

Resuelto porNoseratio:

El tipo correcto de parámetros.ppwzMimeOut ypBC debe serSystem.IntPtr en lugar deSystem.UInt32.

Yo sé esoSystem.UInt32 causa problemas en aplicaciones web completas de 64 bits, pero no sé por qué.

Si alguien sabe el motivo de estos problemas, ¿puede explicarlo mejor en un comentario?

Gracias por adelantado

Respuestas a la pregunta(1)

Su respuesta a la pregunta