2016-05-19 1 views
0

提供された.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となります。

+0

サービスをどのようにホスティングしていますか? IIS?その場合、アプリケーションプールに「32ビットアプリケーションを有効にする」がfalseに設定されていることを確認します。 – lesscode

+0

私はそう思っていません...それは、私はC#とWCFのサービスには一般的ではないと言いました。私は 'System.ServiceModel'を使用しており、クライアントからのhttpアクセスのためにlocalhost上のデバッガを使ってホストされているようです。さらに、私はサービスやクライアントが32ビットだとは思わない - 私は64ビットを全面的に考えている。 – sam

+0

サードパーティのDLLを使用していますか?その場合は、そのビット数を確認します。おそらく32ビットです。すべてのDLLは64ビットでなければならず、プロジェクトで参照するDLLも必要です – Frode

答えて

0

さて、このような状況で自分自身を見つけることができます誰がここで判明しているようだ方法だため:

サードパーティ製の.dllは、32ビットおよび64ビット版の両方に来ました。私はregsvr.exeを1つのバージョンで実行しましたが、他のバージョンでは実行しませんでした(この時点ではどちらがどちらだったかわかりません)。彼らは同じ名前が付いていますが、別のディレクトリに置かれています。混乱を招き、.dllを参照できるようになりますが、呼び出されたときにクラッシュします。

ミステリーは解決されました。

関連する問題