Развертывание веб-приложения с базой данных Informix на сервере - PullRequest
0 голосов
/ 24 января 2019

Фон

Веб-приложение на C # / .NET, которое обращается к базе данных Informix. Клиентский SDK установлен локально.
Проект ссылается на IBM.Data.Informix.dll в каталоге IBM SDK Я использую более старую DLL, потому что база данных Informix, к которой мы имеем доступ, является древней (версия 7. что-то)

Он отлично работает на моей машине (Windows 10) при работе в режиме отладки через Visual Studio. Отлично, я разверну его на тестовом сервере (Windows Server 2012 R2).

Первая попытка

  • Простое развертывание файлов из Visual Studio
  • Запустите приложение для доступа к базе данных
  • Ошибка
Could not load file or assembly 'IBM.Data.Informix, Version=3.0.0.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies. 
The system cannot find the file specified.

Вторая попытка

  • Скопировал dll в папку проекта с именем lib
  • Изменена ссылка на проект для этой библиотеки
  • Развернутые
  • Та же ошибка, что и при первой попытке

Хорошо, я бы лучше это изучил. См. Ниже ссылки.

Третья попытка

  • Удалена ссылка на SDK DLL
  • Установлено из NuGet - версия Avatar Solucoes
  • Развернутые
  • Та же ошибка, что и при первой попытке

Дополнительные исследования

Четвертая попытка

  • Скопировал файлы gacutil на сервер и установил dll с третьей попытки в GAC
  • Развернутые
  • Новая ошибка
The type initializer for 'IBM.Data.Informix.IfxConnection' threw an exception.
Unable to load DLL 'iclit09b.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 

Больше исследований

Пятая попытка

  • Неустановленный пакет NuGet
  • Ссылочная DLL из SDK
  • Добавлен SDK .dll в gac на сервере
  • Обновленное приложение
  • Та же ошибка, что и при первой попытке

Больше исследований

Шестая попытка

  • Установлен из NuGet - снова версия Avatar Solucoes
  • добавил ту же самую DLL в gac на сервере
  • создал новую папку C: \ informix на сервере
  • скопировал iclit09b.dll из ibm sdk в эту папку
  • добавлена ​​папка в PATH
  • Перезапущенный IIS
  • Развернутые
  • Ошибка такая же, как и в четвертой попытке

Больше исследований

Седьмая попытка

  • Скопировал iclit09b.dll в развернутую папку bin.
  • Развернутые
  • Ошибка такая же, как и в четвертой попытке

Больше исследований

Нашел этот зловещий абзац https://www.ibm.com/developerworks/data/library/techarticle/dm-0510durity/index.html

Важное замечание: Драйвер IBM Informix ADO.Net не является автономным в файле IBM.Data.Informix.dll, который устанавливается в каталог / bin вашей установки. Очевидно, он использует другой код клиента, установленный в SDK. Это означает, что вы должны установить Informix Client SDK на любые машины, которые будут использовать драйвер ADO.Net. Вы не можете просто включить IBM.Data.Informix.dll в свой дистрибутив. Это может быть серьезным ограничением для некоторых приложений. Вам также необходимо выполнить настройку SDK (SetNet32), чтобы определить источники данных Informix.

Нужно ли нам устанавливать SDK на производственных серверах? И нужно ли устанавливать библиотеки DLL в GAC? Если да, то как люди могут развертываться на серверах, которые они не контролируют?

Как вы, вероятно, можете сказать, у меня нет большого опыта работы с Informix и .NET.

Я буквально понятия не имею, что делать дальше.

Любые предложения будут приняты с благодарностью.

Ссылки в произвольном порядке

Обновление 2019-01-25

Исходя из ответа @ Satyan, я удалил все предыдущие версии SDK и очистил GAC

Восьмая попытка

  • Я установил последнюю версию SDK
  • Я ссылался на версию IBM.Data.Informix.dll для net40
  • Я добавил эту версию в GAC
  • На локальной машине я получил ту же ошибку, что и первая попытка

Девятая попытка

  • Я ссылался на версию IBM.Data.Informix.dll для net20
  • Я добавил эту версию в GAC
  • На локальной машине я получил ту же ошибку, что и первая попытка

Десятая попытка

К счастью, у меня все еще была копия более старой IBM.Data.Informix.dll

  • Я ссылался на более старую версию IBM.Data.Informix.dll
  • Я добавил эту версию в GAC
  • На моем локальном компьютере я могу снова запустить программу успешно. Уф!
  • Я развернул на сервере
  • Получите ту же ошибку, что и четвертая попытка

Больше исследований

Нашел эти статьи

, что предполагает разрешение

Установите INFORMIXDIR и PATH в качестве системных переменных среды, а затем сбросьте сервер Microsoft Internet Information Server или весь компьютер и попробуйте снова запустить приложение ASP.

Одиннадцатая попытка

  • Добавлена ​​новая системная переменная среды INFORMIXDIR
  • Перезапущенный IIS
  • Попробуйте приложение
  • Неа. По-прежнему получаю ту же ошибку, что и четвертая попытка.

В своем исследовании я обнаружил ссылку на «Informix Connect», который предположительно используется для установки клиентских продуктов. и в файле client_install.pdf в загрузке SDK он ссылается на installconnect.exe, но этот exe-файл не существует в загруженном мной SDK. Если это отдельная загрузка в SDK, я не могу ее найти.

Обновление 2019-02-08

Решили иметь еще одну трещину в этом

Двенадцатая попытка

  • Добавлен каталог informix ближе к началу пути среды
  • Перезапущенный IIS
  • Новая ошибка
SQL0035N The file "en_us\IBM.Data.Informix.xml" cannot be opened. 
at IBM.Data.Utilities.IfxResource..ctor(CultureInfo cultureInfo, String dirName, String fileName, String szMsgPath, String xpath)
   at IBM.Data.Utilities.IfxResources.GetResource(CultureInfo cultureInfo, String xpath)
   at IBM.Data.Informix.IfxException.get_Message()

Aha! Новая ошибка, я где-то получаю.

Тринадцатая попытка

  • Скопированная папка C: \ Program Files \ Informix Client-SDK 4.10.FC9 \ msg в папку INFORMIX на сервере
  • Добавлен IIS_IUSRS в папку informix
  • Перезапущенный IIS
  • Та же ошибка, что и в двенадцатой попытке

Я также попытался скопировать только папку en_us в папку informix - нет!

Больше ссылок

Обновление 2019-02-14

Четырнадцатая попытка ХОРОШО. Я решил рискнуть и установить SDK на сервер.

Чего я не ожидал, так это установки, перезапускающей сервер без первого запроса.

Во всяком случае, когда он вернулся, мы вернулись к первоначальной ошибке

Could not load file or assembly 'IBM.Data.Informix, Version=3.0.0.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies. 
The system cannot find the file specified.

OK. Это не сработало. Это также как-то испортило установку TFS, к которой больше нельзя было получить доступ через браузер.

ОК, я удалю SDK. Нету. Функция удаления завершилась с ошибкой переполнения стека Java. К счастью, сервер является виртуальным, поэтому я восстановил резервную копию прошлой ночью. Все снова хорошо.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Только для справки вот как мне удалось решить проблему

  • Создана виртуальная машина, на которой больше ничего не установлено (кроме IIS)
  • Установлен Informix SDK на этой новой виртуальной машине
  • Написал API для доступа к базе данных Informix
  • Опубликован API для новой VM
  • Написал другое приложение, которое обращается к API
  • Развернуто новое приложение на правильном сервере

Это работает, но я бы предпочел автономное приложение вместо того, чтобы поддерживать два решения.

0 голосов
/ 24 января 2019

Последний драйвер .Net, который является V4, имеет одинаково хорошую обратную совместимость, и ожидается, что он будет хорошо работать с сервером базы данных Informix версии 7.Я бы посоветовал вам попробовать последнюю версию.

Проблема, которую вы можете получить, связана с конфликтом со старым двоичным файлом драйвера, все еще развернутым в GAC (Global Assembly Cache).Если это так, стоит попробовать очистить GAC, и это можно сделать с помощью следующей команды.Откройте командное окно Visual Studio (соответствует версии используемой платформы .net, в данном случае мы используем .net SDK v4). К сведению: для развертывания сборки в GAC может потребоваться привилегия администратора, затем вы можете открыть командное окно VS как администратор.,

cd INFORMIXDIR\bin\netf40
gacutil /u IBM.Data.Informix

После очистки старого двоичного файла из GAC переустановите его в GAC с помощью следующей команды.

gacutil /i IBM.Data.Informix.dll
...