Ich habe eine Desktop-App, die ein Stück Hardware von Drittanbietern mit ihrer bereitgestellten .dll steuert (Ich bin relativ zuversichtlich, dass dies eine 64-Bit-DLL ist, da es ist läuft gut in VS2015 kompiliert mit entweder AnyCPU
oder x64
). Bei Verwendung als Desktop-App funktioniert alles wie erwartet.C# DLL funktioniert gut lokal, aber nicht als WCF-Dienst
Ich versuche nun, dieselben Befehle wie einen WCF-Dienst bereitzustellen, damit eine Clientanwendung die Hardware remote steuern kann. Wenn der Client eine Verbindung erhalte ich:
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.
ich auf die gleiche DLL wie die Desktop-App bin Referenzierung und die gleichen Funktionen aufrufen. Der Client ist auch eine 64-Bit-Anwendung (die derzeit noch auf demselben Rechner läuft). Die Kommunikation zwischen dem Client-Service kann bereits mit einer einfachen Hello World-Funktion verifiziert werden.
Was fehlt mir? Warum funktioniert die .dll in einem Fall reibungslos und nicht anders?
Edit: Ich kann die Client-Anwendung aus dieser auszuschließen, da ich den Fehler auslösen invoke
in der WCF Test Client-Anwendung, die von VS2015 startet. Dies ist definitiv etwas falsch mit der Service-Anwendung. Außerdem kann ich es für 32bit oder für 64bit kompilieren und beide geben die System.BadImageFormatException
.
Wie hosten Sie den Service? IIS? Wenn dies der Fall ist, überprüfen Sie, ob im Anwendungspool die Option "32-Bit-Anwendungen aktivieren" auf "false" gesetzt ist. – lesscode
Ich glaube nicht, dass ich das bin ... Das heißt, ich bin neu bei C# und WCF-Diensten im Allgemeinen. Ich benutze das 'System.ServiceModel' und es scheint nur mit dem Debugger auf localhost für HTTP-Zugriff vom Client gehostet werden. Außerdem glaube ich nicht, dass die .dll der Dienst oder der Client 32bit sind - ich denke seine 64bit auf der ganzen Linie. – sam
Verwenden Sie eine DLL eines Drittanbieters? Wenn ja, überprüfe die Bissigkeit. Es ist wahrscheinlich 32-Bit. Alle DLLs müssen 64-Bit sein, auch die, auf die Sie in Ihrem Projekt verweisen. – Frode