我正在使用在Windows 7 X64中运行的Visual Studio 2010
我试图创建一个简单的WCF双工通信实现。
可悲的是,我很快就被困住了。

我有3个项目:
-具有简单服务合同和实施的服务库
-ServiceHost:通过SelfHosting托管服务库
-客户端:使用WCF服务中的方法

我立即注意到服务库将Any CPU作为平台。另外两个以x86为平台。
在这一点上,我不知道会出现此错误,所以这并没有真正困扰我。

然后,我使用内置的wcfsvchost.exe启动了服务库。服务托管没有问题。
然后,我想通过自己的主机托管我的服务。在这里,我获得了有关System.BadImageFormatException的初次体验。我当时不知道那是什么。
所以我被卡住了,做了一些谷歌搜索。如果我正确理解所有dll等的平台,则需要相同。如果有人可以更好地向我解释。拜托

无论如何,尽管我会更改服务库的平台,因为它具有Any CPU而不是x86。因此,我尝试通过项目设置和配置管理器进行操作。但是问题是我没有选择更改它的选择。然后,我卸载了该项目,查看了其他.csproj的外观并更改了其中的值。重新加载它,一切都很好。现在它具有正确的平台x86。好的,让我们测试运行服务库。BOOM System.BadImageFormatException

System.BadImageFormatException:无法加载文件或程序集“ file:/// C:\ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll”或其依赖项之一。试图加载格式错误的程序。
文件名:“ file:/// C:\ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll”
在System.Reflection.RuntimeAssembly._nLoad处(AssemblyName文件名,字符串codeBase,证据AssemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,布尔throwOnFileNotFound,布尔值用于自省,布尔值抑制安全检查)
在System.Reflection.RuntimeAssembly.InternalLoadAssemblyName处(AssemblyName assemblyRef,证据assemblySecurity,StackCrawlMark&stackMark,用于Introspection的布尔值,用于抑制的布尔值布尔值SecurityCheck
在System.Reflection.Assembly.Load(AssemblyName assemblyRef)
在Microsoft.Tools.SvcHost.ServiceHostHelper.LoadServiceAssembly(String svcAssemblyPath)

===预绑定状态信息===
日志:用户= Sven-PC \ Sven
日志:where-ref绑定。位置= C:\ Users \ Sven \ documents \ Visual Studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll
日志:Appbase = file:/// C:/ Users / Sven / documents / visual studio 2010 / Projects / DuplexDemo / CustomerService2 / bin / Debug
日志:初始PrivatePath = NULL

调用程序集:(未知)。

日志:此绑定从LoadFrom加载上下文开始。
WRN:不会在LoadFrom上下文中探测本机映像。仅在默认的加载上下文中探测本机映像,例如Assembly.Load()。
日志:使用应用程序配置文件:C:\ Users \ Sven \ documents \ Visual Studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll.config
日志:使用主机配置文件:
日志:使用C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.21006 \ config \ machine.config中的计算机配置文件。
日志:尝试下载新的URL文件:/// C:/ Users / Sven / documents / visual studio 2010 / Projects / DuplexDemo / CustomerService2 / bin / Debug / CustomerService2.dll。
ERR:无法完成装配的设置(hr = 0x8007000b)。探测终止。

因此,既然我已经更改了平台,那么服务库将不再运行。所以现在我被困住了,我寻求一些解决方案。

谁能告诉我怎么回事?
不要以为代码有错误,因为它全都是普通的WCF,并且在工作之前就已存在。在x32安装程序中创建时,代码也可以正常工作

请帮帮我

最佳答案

这也许是黑暗中的长镜头,但是您可以在32位模式下运行应用程序池吗?

我猜您不想这样做,因为似乎您已经研究此问题已有一段时间了?

我解决类似问题的方法是逐个浏览我使用的库,直到发现不兼容64位的令人讨厌的3方库。

最好的祝福
里汉

09-27 04:55