如何在32位模式下编译WCF服务库?
我可以从基于x86的项目中引用Matlab代码,但不能从x64项目中引用。如何在32位模式下编译WCF服务库?
我可以构建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 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?
客户端是EXE。 EXE调用WCF Web服务的函数,WCF服务依次调用Matlab函数。我知道DLL需要被标记为“任何CPU”,但是如果我这样做了,那么我不能实例化Matlab类来调用Matlab功能,因为它会给出错误。 – Contango 2010-09-20 20:52:08
推测客户端实际上是使用WCF服务的代理。那么托管WCF服务的是什么 - IIS,控制台应用程序或Windows服务? – 2010-09-21 00:14:56
问题解决了。感谢您让我走上正轨。请参阅:http://*.com/questions/3755761/i-cant-compile-a-standard-wcf-service-library-in-x86-format。我有两个项目的解决方案:一个项目是一个控制台应用程序,它使用WCF服务库中的服务,一个项目是WCF服务库。当我运行控制台应用程序时,它会自动执行由“WcfSvcHost”托管的服务。我已经证明,如果我使用不同的方法(即IIS)来托管我的32位WCF服务库,则不会因为其编译为32位模式而抛出任何异常。 – Contango 2010-09-21 09:05:46
你的问题实际上是WCF测试客户端抱怨你的WCF服务库是32位。这是因为默认情况下,WCF测试客户端始终以64位模式运行。
我在这个blog上发现了以下步骤,使WCF测试客户端以32位模式运行 - 因此您不会看到您发布的错误。
- 将WcfSvcHost.exe和WcfTestClient.exe从C:\ program files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE复制到本地目录。当然,请保留此文件的备份副本。
- 启动Visual Studio 2010命令提示符(从开始菜单 - > Visaul Studio 2010的其中一个链接)
“cd”到您的WcfSvcHost副本所在的目录。
执行命令 “corflags/32BIT +/FORCE WcfSvcHost.exe”
执行命令 “corflags/32BIT +/FORCE WcfTestClient.exe”
把文件复制回哪里找到它。
现在你WcfSvcHost和WcfTestClient将在32位模式下运行,你不会得到你的错误
相关[文章与屏幕](http://coding.abel。 nu/2012/04/debugging-a-wcf-service-using-a-32-bit-dll /)说明如何保留原始.exe以及如何配置VS以使用32位副本的主机和客户端应用程序。 – quetzalcoatl 2015-07-09 13:02:28
您应该注意,由于遵循这些步骤,'WcfSvcHost'和'WcfTestClient'将始终运行在x86中。 – Diego 2016-07-22 20:26:48
默认情况下,'WcfSvcHost.exe'是64位的,所以它只能运行64并且会在32位程序集中抛出错误。如果您可以避免使用'WcfSvcHost.exe'托管,则可以避免与试图使用32位程序集相关的错误。有几种方法来托管WCF服务,避免使用'WcfSvcHost.exe',它解决了原始问题。 – Contango 2013-10-22 16:08:20