Comment utiliser WebDev.WebServer.exe (VS Web Server) en x64?

Visual Studio est x86 jusqu'à ce que au moins la version 2010 vient autour mise à jour: c'est toujours un problème dans VS2010, il n'est pas natif 64 bits Cassini de soutien. Ma question est peut-on penser d'une manière ou d'sais que d'un indépendant ASP.NET debug serveur x64 pour 2008 ou 2010?

Contexte: Notre ASP.NET l'application va à l'encontre d'Oracle comme base de données. Puisque nous sommes sur des serveurs 64 bits pour les problèmes de mémoire plus tard, nous avons besoin d'utiliser Oracle de pilotes 64 bits (Client Instant).

De l'installation:

  • x64 OS (XP ou Windows 7)
  • IIS (6 ou 7, les deux x64 Pools d'Application)
  • Oracle 64 bits Instant Client (Répertoire distinct, dans le CHEMIN d'accès)
  • Visual Studio 2008 SP1 Visual Studio 2010

Dans le pool d'applications IIS s'exécute en tant que 64 bits, utilise l'Oracle des pilotes comme prévu, mais depuis WebDev.WebServer.exe est de 32 bits, vous aurez un BadImageFormatException parce que c'est en essayant de charger pilote 64 bits Dll dans un environnement 32 bits. Tous nos développeurs aimeraient être en mesure d'utiliser le rapide de débogage du serveur via Visual Studio 2008, mais depuis il fonctionne sur 32 bits, nous ne sommes pas en mesure de. Certains des problèmes que nous rencontrons sont en cours de démarrage de l'application, de sorte que même si nous sommes attachés à le processus IIS parfois ce n'est pas suffisant pour suivre une émission vers le bas.

Existe-il des solutions de rechange, ou des solutions de rechange? Nous tenons à la hauteur de nos Dev/Val/Prod niveaux, autant que possible, de sorte que tout ce qui tourne en x64 serait l'idéal.


Mise à jour pour VS 2010

Beaucoup de changements à cette question puisqu'il a été publié, d'abord VS2010 est maintenant, il a toujours les mêmes problèmes ici, cependant, le projet je suis sur ne pas. Nous sommes allés à travers 2 changements pour résoudre ce problème, donc je vais poster ces dans l'espoir qu'il sauve quelqu'un d'autre chagrin:

La première solution a été de charger Oracle x86 en 32 bits, x64 64-bit de mode, nous l'avons fait par le remplacement de l'assemblée de référence lors de l'exécution sous 64 bits via le web.config, comme ceci:

<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>

La clé ici est la processorArchitecture="amd64"cela signifie que le remplacement se produit uniquement lors de l'exécution sous 64 bits.

Noter que ces versions peut être mis à jour (si vous êtes la lecture de ce soucier de l'Oracle en particulier), c'est tout à l'arrière. En plus de la config, nous avons chargé le 32 bits et les versions 64 bits de Oracle.DataAccess dans le GAC. Les versions 32 bits sont 10.xxx pour Oracle 10g, les versions 64 bits sont 2.1xxxil suffit donc de permutation de la liaison à l'aide de <assemblyBinding> .

La deuxième, à plus long terme, la solution était de se déplacer hors de l'Oracle client, nous sommes maintenant en utilisant dotConnect for Oracle pour notre Linq-to-SQL fournisseur, et depuis il est entièrement géré code à l'aide d'une connexion TCP directe, nous n'avons plus de 32/64-bit de code spécifique à l'application, qui est beaucoup plus facile à maintenir.

J'espère que celui qui trouve ce retrouve également le suivi utiles aussi bien. Si vous avez des questions sur l'une ou l'autre solution j'ai fini par utiliser, s'il vous plaît commentaire et je vais essayer de l'expliquer plus en détail.

source d'informationauteur Nick Craver