如何在32位模式下编译WCF服务库?

如何在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

+1

默认情况下,'WcfSvcHost.exe'是64位的,所以它只能运行64并且会在32位程序集中抛出错误。如果您可以避免使用'WcfSvcHost.exe'托管,则可以避免与试图使用32位程序集相关的错误。有几种方法来托管WCF服务,避免使用'WcfSvcHost.exe',它解决了原始问题。 – Contango 2013-10-22 16:08:20

WcfServiceLibrary是一个DLL,所以应建为 “任何CPU”。只有托管所有其他DLL的EXE项目需要根据需要标记为“x86”或“x64”。在这种情况下哪个项目是EXE?

+0

客户端是EXE。 EXE调用WCF Web服务的函数,WCF服务依次调用Matlab函数。我知道DLL需要被标记为“任何CPU”,但是如果我这样做了,那么我不能实例化Matlab类来调用Matlab功能,因为它会给出错误。 – Contango 2010-09-20 20:52:08

+0

推测客户端实际上是使用WCF服务的代理。那么托管WCF服务的是什么 - IIS,控制台应用程序或Windows服务? – 2010-09-21 00:14:56

+0

问题解决了。感谢您让我走上正轨。请参阅:http://*.com/questions/375576​​1/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

我发现了一些很好的解决方案,解决了我所有的问题。我记录在这里: I can't compile a standard "WCF Service Library" in x86 format

你的问题实际上是WCF测试客户端抱怨你的WCF服务库是32位。这是因为默认情况下,WCF测试客户端始终以64位模式运行。

我在这个blog上发现了以下步骤,使WCF测试客户端以32位模式运行 - 因此您不会看到您发布的错误。

  1. 将WcfSvcHost.exe和WcfTestClient.exe从C:\ program files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE复制到本地目录。当然,请保留此文件的备份副本。
  2. 启动Visual Studio 2010命令提示符(从开始菜单 - > Visaul Studio 2010的其中一个链接)
  3. “cd”到您的WcfSvcHost副本所在的目录。

  4. 执行命令 “corflags/32BIT +/FORCE WcfSvcHost.exe”

  5. 执行命令 “corflags/32BIT +/FORCE WcfTestClient.exe”

  6. 把文件复制回哪里找到它。

现在你WcfSvcHost和WcfTestClient将在32位模式下运行,你不会得到你的错误

+0

相关[文章与屏幕](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

+0

您应该注意,由于遵循这些步骤,'WcfSvcHost'和'WcfTestClient'将始终运行在x86中。 – Diego 2016-07-22 20:26:48