Как использовать WebDev.WebServer.exe (VS Web Server) в x64?

Visual Studio - x86 до тех пор, пока по крайней мере не выйдет обновление 2010 года : это все еще проблема в VS2010, нет собственной поддержки 64-битной Cassini. Мой вопрос: кто-нибудь может придумать способ или знает независимый сервер отладки ASP.NET, который x64 для 2008 или 2010?

Справочная информация: наше приложение ASP.NET работает под управлением Oracle как БД. Поскольку мы находимся на 64-битных серверах из-за проблем с памятью позже, нам нужно использовать 64-битные драйверы Oracle (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, поскольку оно пытается загрузить библиотеки DLL 64-разрядных драйверов в 32-разрядных среда. Все наши разработчики хотели бы иметь возможность использовать сервер быстрой отладки через Visual Studio 2008, но, поскольку он работает как 32-разрядный, мы не можем. Некоторые проблемы, с которыми мы сталкиваемся, возникают при запуске приложения, поэтому, хотя иногда мы подключаемся к процессу IIS, этого недостаточно для отслеживания проблемы.

Есть ли альтернативы или обходные пути? Мы бы хотели максимально соответствовать нашим уровням Dev/Val/Prod, чтобы все, что работает в x64, было бы идеальным.


Обновление для VS 2010

Много изменений в этом вопросе с тех пор, как он был впервые опубликован, первый VS2010 вышел, у него все еще есть те же проблемы, но у проекта, над которым я работаю, нет. Чтобы решить эту проблему, мы прошли 2 изменения, поэтому я опубликую их в надежде, что это спасет кого-то еще от горя

Первое решение состояло в том, чтобы загрузить Oracle x86 в 32-разрядной версии, x64 в 64-разрядном режиме, мы сделали это, заменив ссылку на сборку при запуске под 64-разрядной версией через web.config, например:

<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, теперь мы используем dotConnect для Oracle для нашего поставщика Linq-to-SQL, и, поскольку он полностью управляет кодом с использованием прямого TCP-соединения, у нас больше нет 32/64-битный специальный код в приложении, который гораздо проще поддерживать.

Я надеюсь, что тот, кто найдет это, также найдет продолжение полезным. Если у вас есть вопросы по поводу того или иного решения, которое я в конечном итоге использовал, пожалуйста, прокомментируйте, и я постараюсь объяснить более подробно.

4 ответа

Решение

Две идеи:

  1. Cobble что-то вместе с XSP из проекта Mono.
  2. Тестирование в полностью 32-битной среде, развертывание в 64-битной среде.

Вы можете попытаться скомпилировать 64-битный Cassini из исходного кода.

Используйте IIS на вашем локальном компьютере.

Даже если вы используете 64-битную среду, временно обращайтесь к 32-битным библиотекам в Visual Studio (или вручную копируйте их в папку BIN), чтобы вы могли отладить их. Имейте в виду, что каждый раз, когда вы компилируете код, он будет повторно копировать 64-битные сборки в папке BIN.

Другие вопросы по тегам