Как использовать WebDev.WebServer.exe (VS Web Server) в x64? - PullRequest
16 голосов
/ 08 мая 2009

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

Справочная информация. Наше приложение ASP.NET работает под управлением Oracle как БД. Поскольку мы находимся на 64-битных серверах из-за проблем с памятью позже, нам нужно использовать 64-битные драйверы Oracle (Instant Client).

Установка:

  • x64 ОС (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 потому что он пытается загрузить 64-разрядные библиотеки DLL драйвера в 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 ]

3 голосов
/ 14 августа 2009

Две идеи:

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

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

0 голосов
/ 12 апреля 2010

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

0 голосов
/ 15 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...