使用Informix数据库将基于Web的应用程序部署到服务器

问题描述 投票:0回答:2

背景

访问Informix数据库的C#/ .NET Web应用程序。 Client SDK在本地安装。 Project引用IBM SDK目录中的IBM.Data.Informix.dll我正在使用较旧的dll,因为我们必须访问的Informix数据库是古老的(Version 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 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包
  • 来自sdk的引用dll
  • 在服务器上为gac添加了sdk .dll
  • 刷新的应用程序
  • 与第一次尝试相同的错误

更多研究

第六次尝试

  • 从NuGet安装 - 再次使用Avatar Solucoes版本
  • 在服务器上向gac添加了相同的dll
  • 在服务器上创建了新文件夹C:\ informix
  • 将iclit09b.dll从ibm sdk复制到此文件夹
  • 将文件夹添加到PATH
  • 美国重启
  • 部署
  • 错误与第四次尝试相同

更多研究

第七次尝试

  • 将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系统环境变量
  • 美国重启
  • 试试这个应用程序
  • 不。仍然得到与第四次尝试相同的错误。

在我的研究中,我发现了“Informix Connect”的引用,据说它用于安装客户端产品,而在SDK下载的client_install.pdf中引用了installconnect.exe,但是我下载的SDK中不存在该exe。如果是单独下载到SDK,那么我找不到它。

更新2019-02-08

决定再次破解此事

第十二次尝试

  • 添加了informix目录,更接近环境路径的开头
  • 美国重启
  • 新错误
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文件夹
  • 美国重启
  • 与第十二次尝试相同的错误

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

更多参考

更新2019-02-14

第十四次尝试OK。我决定冒风险并在服务器上安装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
2个回答
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

0
投票

只是为了记录这里我是如何设法解决问题的

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

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

© www.soinside.com 2019 - 2024. All rights reserved.