如何在x64中利用WebDev.WebServer.exe(VS WebServer)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

背景:我们的ASP.NET应用程序针对Oracle作为数据库运行。由于我们之后在64位服务器上出于内存方面的考虑,我们需要使用Oracle的64位驱动程序(即时客户端)。

建立:

  • x64操作系统(XP或Windows 7)
  • IIS(6或7,这两个x64应用程序池)
  • Oracle 64位即时客户端(独立目录,在PATH中)

在IIS中,应用程序池以64位运行,按预期使用Oracle驱动程序,但由于WebDev.WebServer.exe是32位,因此将获得BadImageFormatException,因为它试图在64位驱动程序DLL中加载32位环境。我们所有的开发人员都希望能够通过Visual Studio 2008使用快速调试服务器,但由于它运行的是32位,所以我们无法做到这一点。我们遇到的一些问题是在应用程序启动过程中,所以尽管我们有时会附加到IIS进程,但这还不足以跟踪问题。

有没有其他方法或解决方法?我们希望尽可能匹配我们的Dev / Val / Prod层,所以在x64上运行的所有东西都是理想的。

VS 2010更新

自从第一次发布以来,这个问题发生了很多变化,首先VS2010已经出来了,但它仍然存在相同的问题,但是我所做的项目并没有。我们经历了2次修改来解决这个问题,所以我会发布这些信息,希望能够拯救别人的悲伤:

第一种解决方案是在64位模式下加载32位以上的Oracle x86,在64位模式下加载64位,我们通过在通过web.config在64位下运行时替换程序集引用来完成此操作,如下所示:

<configuration>
  <runtime>
    <assemblyBinding>
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" processorArchitecture="amd64" />
          <bindingRedirect oldVersion="2.0.0.0-10.9.9.9" newVersion="2.102.3.2" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这里的关键是processorArchitecture="amd64",这意味着更换只发生在64位下运行。

请注意,这些版本现在可能已过时(如果您正在阅读关于Oracle的这种关注),这是一段时间了。除了配置之外,我们还将32位和64位版本加载Oracle.DataAccess 到GAC中。32位版本适用10.xxx于Oracle 10g,64位版本2.1xxx,因此只需使用<assemblyBinding>作品交换绑定即可

第二个更长期的解决方案是完全脱离Oracle客户端,现在我们为我们的Linq-to-SQL提供程序使用dotConnect for Oracle,并且由于它是使用直接TCP连接的完全托管代码,所以我们不再有32个/ 64位应用程序中的特定代码,这容易维护。

提问于
用户回答回答于

两个想法:

  1. Mono项目中将XSP与XSP结合在一起。
  2. 在完全32位的环境中测试,部署到64位环境。
用户回答回答于

扫码关注云+社区

领取腾讯云代金券