我们尝试从IIS中的ASP.Net网页运行R.net,但遇到R引擎无法访问外部库的问题。我知道这是一个常见的问题,但是当涉及到IIS(只有来自VS内部的IIS表达)时,典型的解决方案无法发挥作用。
例如,当尝试使用' colorRampPalette'在依赖于DLL的R中,出现以下错误消息:
" inDL(x,as.logical(local),as.logical(now),...)出错:无法加载共享对象' C:/ Program Files / R / R -3.4.2 / library / stats / libs / x64 / stats.dll':LoadLibrary失败:找不到指定的模块。"
不是stats.dll是问题,而是它引用的另一个DLL。
现在,使用R中的函数可以正常工作。在VS调试中使用R.net中的函数工作正常。但是,从IIS运行它不起作用。通常情况下,它只是一个路径变量而无法使其工作,但这似乎并非如此。
我们尝试了什么:
这似乎是一个常见问题,但大多数解决方案都是指确保PATH变量是正确的,在这种情况下这根本就不够。
我们正在运行(亚马逊网络服务): Windows Server 2016 x64, IIS 10, R.NET 1.7, C#4.5.2, R 3.4.2
我也尝试过使用类似设置的另一台(非AWS)服务器。
任何可能导致这种情况的想法?由于很多人都遇到了R.Net和IIS的问题,我怀疑有人遇到了PATH变量不够的问题吗?
答案 0 :(得分:0)
我正在解决同样的问题。对于IIS我没有找到解决方案。我也在调试R.NET代码,但通过设置R文件夹的正确路径的解决方案不起作用。
解决方案是创建附加层,其中包括运行R项目(实际上创建自己的R服务器)。我使用自托管WCF服务,
这实际上是控制台应用程序,并且有利于在IIS应用程序池中运行的应用程序。该解决方案还涵盖了单例REngine问题。如果您在IIS中运行实例或REngine,则无法通过停止应用程序池来处置它。对于自托管服务,您可以设置触发器,以便在内存泄漏时重新启动应用程序。
在此实现过程中,我发现问题在控制台应用程序的调试模式下再次运行R.NET R 3.4.3我得到错误"库" ..."无法加载",所以我使用了R 3.4.2。哪个好看。需要86x安装 - 独立于64x / ANYCPU环境中运行的应用程序。
您是否找到了其他解决方案?
答案 1 :(得分:0)
如user2967150所述,问题不是由stats.dll引起,而是由它引用的另一个DLL。 经过大量研究后,我发现它尝试在'C:/ Program Files / R / R-3.4.2 / library / stats / libs / x64 /路径中找到Rlapack.dll。 所以您只需要从'C:\ Program Files \ R \ R-3.4.4 \ bin \ x64 \ Rlapack.dll'复制Rlapack.dll 到'C:/ Program Files / R / R-3.4.2 / library / stats / libs / x64 /。 之后,Web应用程序可以访问外部R库。
注意:我假设您的Web应用程序在本地运行,但是当您尝试在IIS上运行它时会出现问题。