urlmon.dll FindMimeFromData () отлично работает на 64-битном десктопе / консоли, но выдает ошибки на ASP.NET
Я создаю библиотеку утилит для использования как в настольной среде, так и в веб-среде.
Он содержит несколько функций, которые, как мне кажется, часто повторяются в моих приложениях, в том числе утилиту для получения файла типа mime по его содержимому (а не по расширению).
Файлы, которые мне нужно проверить, являются наиболее распространенными (jpg, png, pdf, txt), поэтому я решил использовать внешний методFindMimeFromData
(ссылка выше)
Используя .NET, как вы можете найти MIME-тип файла на основе сигнатуры файла, а не расширения
Метод работает хорошо, за исключением двух неправильных типов пантомимы JPG (image/pjpg
) и PNG (image/x-png
), легко решается путем проверки перед оператором возврата.
Библиотека скомпилирована для платформы AnyCPU, потому что она должна быть установлена на серверах / клиентах как в 32, так и в 64 битах.
На момент тестирования в среде рабочего стола все работало нормально для обоих приложений, скомпилированных для x86 и x64.
во время тестирования приложения ASP.NET (пустой сайт с обработчиком http для теста) возникает ошибка типа HRESULT, и отладчик сообщает мне, что не может предоставить дополнительную информацию.
После нескольких тестовых настроек, включая изменение идентификатора пула на Local System (без результата), я обнаружил проблему:
пул должен разрешать 32-битные приложения (см. изображение выше).
Почему?
Не должен загружать dllurlmon.dll
64-битной системы, где мы сейчас находимся?
Это большая проблема, потому чтоFindMimeFromData
метод может быть вызван везде в эту библиотеку:
В результате вызов этого метода другим вспомогательным методом может вызвать это исключение и усложнить отслеживание проблемы также посредством отладки.
Есть идеи / опыт?
Операционные системы, используемые для тестирования
Рабочий стол:
Windows 8 x64 -работаетWindows 7 x64 -работаетWindows Server 2008 Standard R2 x64 -работаетWindows Server 2008 Standard x86 -работаетWindows Server 2003 Standard x86 -работаетWindows XP Professional SP3 -работаетвеб-сайт:
Windows 8 x64 -обнаружена первая ошибка, работает только с включенным 32-битным приложениемWindows Server 2008 Standard R2 x64 -ошибка подтверждена, работает только с включенным 32-битным приложениемWindows Server 2008 Standard x86 -работаетРЕДАКТИРОВАТЬ 2 (вопрос решен)
РешеноNoseratio:
Правильный тип параметровppwzMimeOut
а такжеpBC
должно бытьSystem.IntPtr
вместоSystem.UInt32
.
я знаю этоSystem.UInt32
вызывает проблемы в полноценных 64-битных веб-приложениях, но я не знаю почему.
Если кто-то знает причину этих проблем, может лучше объяснить это в комментарии?
заранее спасибо