如何在x64中使用WebDev.WebServer.exe(VS Web服务器)?

时间:2009-05-07 22:05:23

标签: asp.net oracle 64-bit webdev.webserver

Visual Studio是x86直到至少2010版本出现 更新:这仍然是VS2010中的一个问题,没有原生的64位Cassini支持。我的问题是,任何人都可以想到一种方法或知道一个独立的ASP.NET调试服务器,它是2008年或2010年的x64吗?

背景:我们的ASP.NET应用程序作为数据库运行在Oracle上。由于我们以后会在64位服务器上出现内存问题,因此我们需要使用Oracle的64位驱动程序(Instant Client)。

设定:

  • x64 OS(XP或Windows 7)
  • IIS(6或7,两个x64应用程序池)
  • Oracle 64-bit Instant Client(单独的目录,在PATH中)
  • Visual Studio 2008 SP1 Visual Studio 2010

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

有没有替代方案或解决方法?我们希望尽可能地匹配我们的Dev / Val / Prod层,因此在x64中运行的所有内容都是理想的。


VS 2010更新

自这个问题首次发布以来,这个问题发生了很多变化,首先VS2010现在已经出来了,它仍然存在相同的问题,但是我所在的项目没有。我们经历了2次更改来解决这个问题,因此我会发布这些内容,希望能够挽救别人的悲痛:

第一个解决方案是以32位加载Oracle x86,在64位模式下加载x64,我们通过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的内容),这还有一段时间了。除了配置之外,我们还加载了Oracle.DataAccess into the GAC的32位和64位版本。对于Oracle 10g,32位版本为10.xxx,64位版本为2.1xxx,因此只有swapping the binding using <assemblyBinding> works

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

我希望发现这一点的人也会发现后续行动也很有用。如果您对我最终使用的任何一种解决方案有疑问,请发表评论,我会尝试更详细地解释。

4 个答案:

答案 0 :(得分:3)

两个想法:

  1. Mono项目中的XSP一起拼凑一些东西。
  2. 在完全32位的环境中进行测试,部署到64位环境。

答案 1 :(得分:2)

您可以尝试从source编译64位Cassini。

答案 2 :(得分:0)

在本地计算机上使用IIS。

答案 3 :(得分:0)

即使您使用的是64位环境,也可以在Visual Studio中临时引用32位dll(或者在BIN文件夹中手动复制它),以便您可以对其进行调试。请记住,每次编译代码时,它都会重新复制BIN文件夹中的64位程序集。