- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Vista x64 上的 Visual Studio 2008 中创建 WCF 服务库在引用 x86 DLL 时很麻烦。调用 32 位 DLL 的服务需要具有 x86 平台目标才能在 64 位操作系统上运行。执行此操作时,WcfSvcHost 在您尝试调试服务时会抛出 BadImageFormatException。有一个 bug report在 MS 连接上。我使用的解决方法是 coreflag WcfSvcHost as 32-bit .
明显问题
我遇到的主要问题是这个第三方 native 32 位 DLL 无法使用某些 WCF 主机加载。当调用使用第三方 DLL 的服务操作时,我收到以下错误:
System.TypeInitializationException: The type initializer for '' threw an exception.
.ModuleLoadExceptionHandlerException: A nested exception occurred after the primary exception that caused the C++ module to fail to load.
System.BadImageFormatException: The module was expected to contain an assembly manifest. (Exception from HRESULT: 0x80131018)
嵌套异常:
The handle is invalid. (Exception from HRESULT: 0x80070006 (E_HANDLE))
此异常不会在 WcfSvcHost 启动时引发,而是在调用引用 32 位 DLL 的服务操作时引发。非常有趣的是,在控制台应用程序上使用相同的 app.config 托管相同的服务没有异常(exception)并且完美运行:
using (ServiceHost host = new ServiceHost (typeof (MsgBrokerService))) {
host.Open ();
Console.WriteLine ("running");
Console.ReadLine ();
此异常发生在:
'WcfSvcHost.exe' (Managed): Loaded 'C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.3053_ none_d08d7bba442a9b36\msvcm80.dll'
同样,控制台应用程序没有异常并加载相同的 DLL:
'ConsoleApp.vshost.exe' (Managed): Loaded 'C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.3053_ none_d08d7bba442a9b36\msvcm80.dll'
查看答案 from Microsoft Product Support .
更新 #1:控制台应用程序和 WcfSvcHost.exe 主机进程都在同一 session 和登录用户 (me) 下运行。我已将 WcfSvcHost.exe 复制到服务目录,手动启动并遇到相同的结果。我还检查了 Windows 事件日志以获取更多信息并使用了 sxstrace,但未记录任何内容。
运行 Process Explorer,我已经验证了两个进程之间的以下内容相同:
运行进程监视器,和 configuring symbols ,我看到 WcfSvcHost 寻找以下注册表和文件,而控制台主机没有。 Process Monitor 记录了大量数据,我不确定自己在寻找什么 :(。
HKLM\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default\policy.8.0.msvcm80__b03f5f7f11d50a3a C:\Windows\assembly\GAC_32\msvcm80\8.0.50727.3053__b03f5f7f11d50a3a C:\Windows\assembly\GAC_MSIL\msvcm80\8.0.50727.3053__b03f5f7f11d50a3a C:\Windows\assembly\GAC\msvcm80\8.0.50727.3053__b03f5f7f11d50a3a
更新 #2:当服务在 IIS 6/Windows Server 2003 上在生产中托管时,也会发生同样的异常。
更新 #3:第 3 方 32 位 .NET 程序集是 StreamBase API :
更新 #4:添加 list 但没有成功:
我已验证 msvcm80.dll 没有 list ,我相信这是唯一没有 list 的加载文件:)
有趣的发现
当我在 Reflector 中加载 monitor.netmodule 时,它说:
'monitor.netmodule' does not contain an assembly manifest.
即使显示错误,Reflector 仍然能够反汇编托管代码。
最佳答案
有点晚了,但您也可以在高级设置中将应用程序池设置“启用 32 位应用程序”更改为 true。
关于c++ - WcfSvcHost 和 IIS WCF 主机遇到 BadImageFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/727313/
抱歉还有一个跨域问题。 我现在一整天都在与它抗争,快要沸腾了。 我有一个 Silverlight 应用程序项目 (SLApp1)、一个用于托管 Silverlight 的 Web 项目 (SLApp1
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Re
是否可以强制 WcfSvcHost(当我执行 F5 或在解决方案中调试另一个项目时自动执行)使用自定义 ustom 服务? 我的自定义服务主机在我的 asp.net 主机容器中运行良好,方法是使用一个
我正在尝试编写我的第一个 WCF 项目。我创建了一个 WCF 库类型的项目。 在我正在工作的视频中,当按下 F5(启动调试器)时,WCF 测试客户端启动。 我必须对我的项目设置做什么才能启动 WcfT
当我尝试在 Visual Studio 2012 中运行 wcf 时,出现以下错误 Usage: WcfSvcHost.exe /service: /config: [/client:][/clien
在 Vista x64 上的 Visual Studio 2008 中创建 WCF 服务库在引用 x86 DLL 时很麻烦。调用 32 位 DLL 的服务需要具有 x86 平台目标才能在 64 位操作
使用 Visual Studio 2010,我编写了一个简单的 WCF 服务和一些我想对其运行的集成测试。我在代码中构建运行时测试的代理,而不是使用配置。 我的测试在调试中通过,但在运行时失败! 如果
我是一名优秀的程序员,十分优秀!