【问题标题】:Deploying a web-based application with Informix database to server将带有 Informix 数据库的基于 Web 的应用程序部署到服务器
【发布时间】:2019-01-24 14:49:08
【问题描述】:

背景

访问 Informix 数据库的 C#/.NET Web 应用程序。 客户端 SDK 安装在本地。
项目引用 IBM SDK 目录中的 IBM.Data.Informix.dll 我正在使用较旧的 dll,因为我们必须访问的 Informix 数据库是古老的(版本 7.something)

当通过 Visual Studio 在调试模式下运行时,它可以在我的机器(Windows 10)上完美运行。 太好了,我会将它部署到测试服务器(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 的项目文件夹中
  • 更改了对此 dll 的项目引用
  • 已部署
  • 与第一次尝试相同的错误

好的,我最好研究一下。请参阅下面的参考资料。

第三次尝试

  • 删除了对 sdk dll 的引用
  • 从 NuGet 安装 - Avatar Solucoe 版本
  • 已部署
  • 与第一次尝试相同的错误

更多研究

第四次尝试

  • 将 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 包
  • 来自 sdk 的引用 dll
  • 将 sdk .dll 添加到服务器上的 gac
  • 刷新应用
  • 与第一次尝试相同的错误

更多研究

第六次尝试

  • 从 NuGet 安装 - 再次是 Avatar Solcoes 版本
  • 向服务器上的 gac 添加了相同的 dll
  • 在服务器上创建了新文件夹 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 驱动程序不是独立包含在安装在您安装的 /bin 目录中的 IBM.Data.Informix.dll 文件中。显然,它使用了 SDK 安装的其他一些客户端代码。 这意味着您必须在任何将使用 ADO.Net 驱动程序的机器上安装 Informix Client SDK。您不能只在您的分发中包含 IBM.Data.Informix.dll。对于某些应用程序来说,这可能是一个严重的限制。您还需要通过 SDK 设置 (SetNet32) 来定义您的 Informix 数据源。

我们真的需要在生产服务器上安装 SDK 吗?并且必须在 GAC 中安装 DLL? 如果是这样,人们如何部署到他们无法控制的服务器上?

如您所知,我对 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”的引用,据称它用于安装客户端产品 在 SDK 下载的 client_install.pdf 中,它引用了 installconnect.exe,但我下载的 SDK 中不存在该 exe。 如果是单独下载到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()

啊哈!一个新的错误,我到了某个地方。

第十三次尝试

  • 将 C:\Program Files\Informix Client-SDK 4.10.FC9\msg 文件夹复制到服务器上的 INFORMIX 文件夹中
  • 将 IIS_IUSRS 添加到 informix 文件夹
  • 重新启动 IIS
  • 与第十二次尝试相同的错误

我还尝试将 en_us 文件夹复制到 informix 文件夹中 - 不!

更多参考资料

2019 年 2 月 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.

好的。那没有用。它还以某种方式弄乱了 TFS 的安装,无法再通过浏览器访问。

好的,我将卸载 SDK。没有。卸载功能因 Java 堆栈溢出错误而崩溃。幸运的是服务器是虚拟的,所以我恢复了昨晚的备份。一切正常。

【问题讨论】:

    标签: .net informix


    【解决方案1】:

    最新的 .Net 驱动程序是 V4,具有同样良好的向后兼容性,预计可与 Informix 数据库服务器版本 7 良好配合。我会鼓励你尝试最新的。

    您可能遇到的问题是由于与仍部署在 GAC(全局程序集缓存)中的旧驱动程序二进制文件发生冲突。 如果是这样,值得尝试清理 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
    

    【讨论】:

      【解决方案2】:

      为了记录,这里是我设法解决问题的方法

      • 创建了一个没有安装任何其他东西的虚拟机(除了 IIS)
      • 在这个新 VM 上安装了 Informix SDK
      • 编写了用于访问 Informix 数据库的 API
      • 将 API 发布到新 VM
      • 编写了另一个访问 API 的应用程序
      • 将新应用部署到正确的服务器

      它可以工作,但我更喜欢一个独立的应用程序,而不是必须维护两个解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多