如何以32位模式编译WCF服务库?
我可以从基于x86的项目中引用Matlab代码,但不能从x64项目中引用 我可以将WCF服务构建为“任何CPU”,但不能构建为x86。当我尝试仅构建为x86时,会出现以下错误:如何以32位模式编译WCF服务库?,wcf,Wcf,我可以从基于x86的项目中引用Matlab代码,但不能从x64项目中引用 我可以将WCF服务构建为“任何CPU”,但不能构建为x86。当我尝试仅构建为x86时,会出现以下错误: ---start error--- System.BadImageFormatException: Could not load file or assembly 'file:///D:\backtest\WcfServiceLibrary.dll' or one of its dependencies. An atte
---start error---
System.BadImageFormatException: Could not load file or assembly 'file:///D:\backtest\WcfServiceLibrary.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.
---end error---
因此,我陷入了困境:我究竟如何通过WCF提供Matlab调用?这就像是某种奇怪的XOR形式的开发人员
关于如何(a)以32位模式编译WCF服务库,或(b)解决此问题,您有什么想法
我有Win7 x64,MSVS 2010。WcfServiceLibrary是一个DLL,所以应该构建为“任何CPU”。只有托管所有其他DLL的EXE项目需要根据需要标记为“x86”或“x64”。在这种情况下,哪个项目是EXE?我找到了几个很好的解决方案,解决了我所有的问题。我在这里记录了它:
您的问题实际上是WCF测试客户端抱怨您的WCF服务库是32位的。这是因为默认情况下,WCF测试客户端始终以64位模式运行 我发现以下步骤可以使WCF测试客户端在32位模式下运行,因此您不会看到您发布的错误
现在,您的WcfSvcHost和WcfTestClient将以32位模式运行,您将不会收到错误客户端是EXE。EXE调用WCF web服务的函数,WCF服务依次调用Matlab函数。我知道DLL需要标记为“任何CPU”,但是如果我这样做,那么我就不能实例化Matlab类来调用Matlab功能,因为它会产生错误。可能客户机实际上正在使用WCF服务的代理。那么,WCF服务(IIS、控制台应用程序或Windows服务)的宿主是什么呢?问题已解决。谢谢你让我走上正轨。请参阅:。我有两个项目的解决方案:一个项目是使用WCF服务库服务的控制台应用程序,另一个项目是WCF服务库。当我运行控制台应用程序时,它会自动执行由“WcfSvcHost”托管的服务。我已经演示了,如果我使用不同的方法(即IIS)托管我的32位WCF服务库,它不会因为以32位模式编译而引发任何异常。此链接详细介绍了托管WCF服务的方法:默认情况下,
WcfSvcHost.exe
为64位,因此,它只运行64位程序集,并将对32位程序集抛出错误。如果可以避免使用WcfSvcHost.exe
托管,则可以避免与尝试使用32位程序集相关的错误。托管WCF服务的方法可以避免WcfSvcHost.exe
,从而解决原始问题。相关说明说明如何保留原始.exe以及如何配置VS以使用主机和客户端应用程序的32位副本。您应该注意,由于遵循此步骤,WcfSvcHost
和WcfTestClient
将始终在x86中运行。