urlmon.dll FindMimeFromData () funciona perfeitamente no desktop / console de 64 bits, mas gera erros no ASP.NET

Estou criando uma biblioteca de utilitários para ser usada no ambiente de área de trabalho em um ambiente da Web.

Ele contém vários recursos que, na minha opinião, são frequentemente repetidos em meus aplicativos, incluindo o utilitário para obter o tipo mime de um arquivo pelo seu conteúdo (não pela extensão).

Os arquivos que eu terei que checar são os mais comuns (jpg, png, pdf, txt) então optei por usar o método externoFindMimeFromData (link acima)

Usando o .NET, como você pode encontrar o tipo MIME de um arquivo baseado na assinatura do arquivo e não na extensão

O método funciona bem, exceto pelos dois tipos incorretos de mime JPG (image/pjpg) e PNG (image/x-png), facilmente resolvido fazendo uma verificação antes da declaração de retorno.

A biblioteca é compilada para a plataforma AnyCPU, porque deve ser instalada em servidores / clientes em 32 e 64 bits.

No momento do teste no ambiente de desktop tudo funcionando corretamente para ambos os aplicativos compilados para x86 e x64.

no momento de testar um aplicativo ASP.NET (um site vazio com um manipulador http para teste) ocorre um erro do tipo HRESULT e o depurador informa que ele não pode fornecer informações adicionais.

Após algumas configurações de teste, incluindo a alteração da identidade do pool para o sistema local (sem resultado), identifiquei o problema:

o pool deve permitir aplicativos de 32 bits (veja a imagem acima).

Por quê?

Não deve carregar a dllurlmon.dll do sistema de 64 bits onde estamos agora?

Este é um grande problema, porque oFindMimeFromData método pode ser chamado por toda parte nesta biblioteca:

o resultado é que uma invocação desse método por outro método de utilitário pode lançar essa exceção e dificultar o rastreamento do problema também por meio da depuração.

Alguma idéia / experiência?

Sistemas operacionais usados ​​para testes

Área de Trabalho:

Windows 8 x64 -trabalhoWindows 7 x64 -trabalhoWindows Server 2008 Standard R2 x64 -trabalhoWindows Server 2008 Standard x86 -trabalhoWindows Server 2003 Standard x86 -trabalhoWindows XP Professional SP3 -trabalho

Rede:

Windows 8 x64 -primeiro erro encontrado, funciona apenas com o aplicativo de 32 bits ativadoWindows Server 2008 Standard R2 x64 -erro confirmado, funciona apenas com a aplicação de 32 bits ativadaWindows Server 2008 Standard x86 -trabalho

EDIT 2 (questão resolvida)

Resolvido porNoseratio:

O tipo correto de parâmetrosppwzMimeOut epBC devemos serSystem.IntPtr ao invés deSystem.UInt32.

Eu sei dissoSystem.UInt32 causa problemas em aplicativos da web completos de 64 bits, mas não sei por quê.

Se alguém souber o motivo desses problemas, pode explicar melhor em um comentário?

desde já, obrigado

questionAnswers(1)

yourAnswerToTheQuestion