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

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

我可以从基于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 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.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位模式运行,您将不会收到错误

    客户端是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中运行。