2010-09-20 88 views
10

我可以從基於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

回答

9

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://stackoverflow.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

24

你的問題實際上是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