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

时间:2019-01-24 14:49:09

标签: .net informix

背景

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

更多研究

第六次尝试

  • 再次从NuGet安装-Avatar Solucoes版本
  • 将相同的dll添加到服务器上的gac
  • 在服务器上创建了新文件夹C:\ informix
  • 从ibm sdk复制iclit09b.dll到该文件夹​​
  • 将文件夹添加到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
  • 在本地计算机上,我可以再次成功运行该程序。 ew!
  • 我已部署到服务器
  • 得到与第四次尝试相同的错误

更多研究

找到了这些文章

这表明分辨率是

  

将INFORMIXDIR和PATH设置为系统环境变量,然后重新启动Microsoft Internet Information Server或整个计算机,然后尝试再次运行ASP应用程序。

第11次尝试

  • 添加了新的INFORMIXDIR系统环境变量
  • 重新启动IIS
  • 试用该应用程序
  • 不。仍然会遇到与第四次尝试相同的错误。

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

更新2019-02-08

决定要再解决一次

第十二次尝试

  • 添加了更靠近环境路径开始的notifyix目录
  • 重新启动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添加到notifyix文件夹
  • 重新启动IIS
  • 与第十二次尝试相同的错误

我还尝试仅将en_us文件夹复制到notifyix文件夹-不!

更多参考

更新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.

好。那没用。它还以某种方式使TFS的安装变得混乱,无法再通过浏览器对其进行访问。

好的,我将卸载SDK。不。卸载功能因Java堆栈溢出错误而崩溃。幸运的是,该服务器是虚拟服务器,因此我恢复了昨晚的备份。一切都很好。

2 个答案:

答案 0 :(得分:1)

最新的.Net驱动程序V4具有同等的向后兼容性,并且可以与Informix数据库服务器version7一起很好地工作。我鼓励您尝试最新的。

您可能遇到的问题是由于与仍部署在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

答案 1 :(得分:0)

记录一下,这就是我如何解决问题的方法

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

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