私は、両方のWeb環境でデスクトップ環境で使用できるユーティリティライブラリを作成しています。urlmon.dll FindMimeFromData()は64bitデスクトップ/コンソールではうまく動作しますが、ASP.NETでエラーが発生します
これは、ファイルのMIMEタイプを(拡張子ではなく)ファイルを取得するユーティリティを含む、私のアプリケーションでよく繰り返されると思われるいくつかの機能が含まれています。私がチェックする必要があります
ファイルが最も一般的である(JPG、PNG、PDF、TXT)ので、私は外部の方法(上記のリンク)
Using .NET, how can you find the mime type of a file based on the file signature not the extension
方法を使用することにしましたreturn文の前にチェックをするだけで簡単に解決できるJPG(image/pjpg
)とPNG(image/x-png
)の2つの誤ったMIMEタイプを除いてうまくいきます。
ライブラリは32ビットと64ビットの両方のサーバー/クライアントにインストールする必要があるため、プラットフォームAnyCPU用にコンパイルされます。
x86およびx64向けにコンパイルされたアプリケーションのデスクトップ環境でのテストがすべて正しく動作しています。
ASP.NETアプリケーション(テスト用のHTTPハンドラを持つ空のサイト)のテスト時に、HRESULT型のエラーが発生し、デバッガがそれ以上の情報を提供できないことを通知します。
(NO結果)ローカルシステムにプールのIDを変更するなど、いくつかのテスト構成の後、私はこの問題を特定した:
プールは、32ビットのアプリケーション(上記画像参照)を可能にすべきです。
なぜ?
私たちは現在64ビットシステムのurlmon.dll
をロードしてはいけませんか?
方法は、このライブラリにどこでも呼び出すことができので、これは、大きな問題である:
結果は、別のユーティリティメソッドにより、このメソッドの呼び出しは、この例外をスローし、トレースにそれが困難かもしれないということですデバッグによっても問題が発生します。
アイデア/経験ありですか?
されているオペレーティングシステムは
デスクトップのテストに使用:
- のWindows 8のx64を - 作品 Windows 8の
- :
- Windows Server 2008の標準のx86 -
- のWindows XP ProfessionalのSP3で動作します - は
- のWindows Server 2003の標準のx86の作品x64 - 最初にエラーが見つかりました.32ビットアプリケーションのみが有効です
- のWindows Server 2008の標準R2 x64の -
Webの作品から
EDIT 2(質問解決)
に動作します - エラーは32ビットアプリケーションでのみ動作しますが、解決済みNoseratio:
正しいパラメータppwzMimeOut
とpBC
のタイプは、System.UInt32
ではなく、System.IntPtr
でなければなりません。
私は、System.UInt32
が完全な64ビットWebアプリケーションに問題を引き起こしていることを知っていますが、理由はわかりません。
誰かがこれらの問題の原因を知っている場合は、コメントでそれをよりよく説明できますか?事前に
おかげで
これは、[this](http://stackoverflow.com/a/15595571/495455)のような 'URLMon.dll'のフォールバックメソッドを持つのが良い理由です。または、あなたのケースでは、ウィリアムのためにウルモンを全部捨てる。 –