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

Nic*_*ver 16 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位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>
Run Code Online (Sandbox Code Playgroud)

这里的关键是processorArchitecture="amd64",这意味着只有在64位下运行时才会发生替换.

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

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

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

xan*_*ont 3

两个想法:

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