2009-12-10 4 views
3

Моя машина разработки Vista x64.Развертывание веб-сервера, использующего Oracle.DataAccess, приводит к различным сборочным ошибкам

Я использую веб-службы WCF для создания веб-сервисов, взаимодействующих с базой данных oracle 10g.

Когда началось развертывание, я не смог использовать встроенный инструмент тестирования WCF VS908 [WCFTestClient], который запускается при нажатии F5 [Go] в 32-разрядном Oracle.DataAccess.dll, поскольку я получаю System.BadImageFormatException на объект Oracle. Поэтому в моей среде разработки я переключился на 64-разрядную версию ODP.NET для моей ссылки на сборку, и это отлично работает.

Я могу развернуть мой локальный IIS [7], но только если я использую 32-битный Oracle.DataAccess.dll.

Я пытаюсь установить на Win2003 [IIS 6], где установлен .NET 3.5 sp1, и база данных Oracle 10g. Другие веб-приложения на этом сервере успешно используют соединения oracle.

Если я удалю все ссылки на Oracle.DataAccess из файла web.config и убедитесь, что в моем bin/folder нет файла Oracle.DataAccess.dll, я могу открыть страницу метаданных службы по умолчанию [s], но вызов службы через клиент SOAP приводит к ошибке:

«Не удалось загрузить файл или сборку Oracle.DataAccess, Version = 10.2.0.100, Culture = neutral, PublicKeyToken = 89b483f429c47342» или одну из его зависимостей. система не может найти указанный файл ».

Однако, если я положил копию Oracle.DataAccess.dll в моей бен/папке, я получаю:.

«Не удалось загрузить файл или сборку„Oracle.DataAccess“или один из его зависимостей находящейся (пример из HRESULT: 0x80131040) «

при попытке загрузить страницу .svc в веб-браузере.

Если добавить ссылку на сборку в моем web.config, я получаю ошибку конфигурации: «Не удалось загрузить файл или сборку ххх»

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

ответ

2

Хорошо, мне удалось [частично] разрешить его, но мне все еще нужно знать, почему это вызвало ошибку.

Я установил 32-разрядную версию ODP.NET на свой локальный компьютер в отдельной папке из 64-разрядной установки. Я изменил ссылку на сборку в проекте VS на файл Oracle.DataAccess.dll, расположенный в папке odp.net/bin/2.x/.

Теперь сообщение SOAP больше не выдает ошибку.

Теперь возникает вопрос: почему мой выбор dll в моей среде разработки управляет dll, который должен использоваться в производственной среде? Я хочу, чтобы иметь возможность разрабатывать на 64 бит и развертывать на 32-битный сервер без необходимости менять мои ссылки каждый раз, когда я хочу развернуть.

9

Недавно я столкнулся с подобной проблемой и обнаружил, что исключение System.BadImageFormatException было вызвано ссылкой на 32-разрядную версию Oracle.DataAccess из проекта, в котором указана целевая платформа Any/x64. После установки проекта на цель x86 и конфигурацию IIS 7 для включения 32-разрядных приложений (щелкните правой кнопкой мыши на пуле приложений -> расширенные настройки ...установите для параметра «Включить 32-разрядные приложения» значение «true»), похоже, все работает так, как ожидалось. Кроме того, here - это ссылка на статью, в которой объясняется, как получить как 32, так и 64-разрядные версии, запущенные на разных рабочих процессах, и еще here, объясняющие, как получить 32-разрядные приложения для работы на 64-битной основе с помощью IIS 6.

+0

Проверьте также: http://stackoverflow.com/a/10557694/114029 –

1

Работа моей компании в ту же проблему, и нам пришлось рассчитывать на использование 32-битной dll из-за отсутствия лучшего решения.

Из того, что мы могли сказать, 64-разрядные DLL-серверы Oracle построены исключительно для 64-битных. В отличие от DLL-сборки с «Any», он также не включает 32-битный объектный код. Это было бы неплохо, за исключением дополнительной проблемы, что 32-разрядная dll, похоже, не загрузила на всех, если только проект не построен исключительно для 32-битной.

Мы пробовали десятки итераций 64/32-разрядных библиотек DLL и настроек проекта, и мы полностью не смогли получить что-либо для работы, кроме 32-разрядного DLL/32-битного проекта. В итоге нам пришлось продвигаться вперед с проектом и прекратить инвестировать время в бесконечную борьбу.

Мое честное предложение - оценить альтернативные решения баз данных, если это возможно. Мой опыт работы с Oracle был очень болезненным.

В противном случае просто создайте 32-разрядную версию. Это не должно вызывать никаких проблем.

Смежные вопросы