提供された.dllを使用してサードパーティのハードウェアを制御するデスクトップアプリケーションを構築しました(これは64ビット.dll AnyCPU
またはx64
のいずれかでコンパイルされたVS2015で正常に動作しています)。デスクトップアプリケーションとして使用すると、すべてが期待通りに機能します。C#DLLはローカルで正常に動作しますが、WCFサービスとして公開されている場合は表示されません。
私は現在、これらのコマンドをWCFサービスとして公開しようとしています。クライアントアプリケーションがハードウェアをリモートで制御できるようにするためです。クライアントが接続すると、私は次のようになります。
An exception of type 'System.BadImageFormatException' occurred in mscorlib.dll but was not handled in user code
Additional information: Retrieving the COM class factory for component with CLSID {58DB561E-0186-11D5-BBB6-00508B35B332} failed due to the following error: 800700c1 is not a valid Win32 application. (Exception from HRESULT: 0x800700C1).
If there is a handler for this exception, the program may be safely continued.
私はデスクトップアプリケーションと同じ.dllを参照し、同じ機能を呼び出しています。クライアントは64ビットアプリケーションでもあります(現在、同じマシン上で実行中)。クライアントサービス間の通信は、単純なHello World機能ですでに確認できます。
私には何が欠けていますか? .dllはなぜ、あるケースではスムーズに動作し、もう一方ではうまく動作しないのですか?
編集: 私はVS2015から起動WCFテストクライアントアプリケーションでinvoke
を使用して、エラーを引き起こすことができるように私は、これからクライアントアプリケーションを除外することができます。これは間違いなくサービスアプリケーションに間違っています。また、私は32ビット用または64ビット用にコンパイルすることができ、どちらもSystem.BadImageFormatException
となります。
サービスをどのようにホスティングしていますか? IIS?その場合、アプリケーションプールに「32ビットアプリケーションを有効にする」がfalseに設定されていることを確認します。 – lesscode
私はそう思っていません...それは、私はC#とWCFのサービスには一般的ではないと言いました。私は 'System.ServiceModel'を使用しており、クライアントからのhttpアクセスのためにlocalhost上のデバッガを使ってホストされているようです。さらに、私はサービスやクライアントが32ビットだとは思わない - 私は64ビットを全面的に考えている。 – sam
サードパーティのDLLを使用していますか?その場合は、そのビット数を確認します。おそらく32ビットです。すべてのDLLは64ビットでなければならず、プロジェクトで参照するDLLも必要です – Frode