为什么R.NET在本地工作但在IIS中停止工作?

时间:2017-04-04 21:36:10

标签: asp.net r ajax rstudio r.net

我有一个ASP.NET MVC应用程序,它将参数发送到R脚本,然后R脚本生成一个文件并将其放在本地文件夹中。该过程在我的本地计算机上通过Visual Studio完美运行,但在我发布和使用IIS后进出。下面是我如何初始化R.NET并通过AJAX从我的视图中获取这些值。

我也将这两个PATH放在我的系统环境变量中。

如果有人知道为什么IIS只在我重新启动操作系统后才能正常工作,然后在我非常感激之后不久就停止工作。似乎很奇怪,我在IIS中遇到的Visual Studio没有任何问题。

        [HttpGet]
    public JsonResult Index1(string modelTypes = null, string fileNames = null, string[] locations = null, string lowerLimits = null, string upperLimits = null, string areas = null, string productivities = null, string[] fobs = null)
    {
        @ViewBag.UserName = System.Environment.UserName;
        string userName = @ViewBag.UserName;
        //Declare field parameters
        var strModelTypeValue = modelTypes;
        string strFileName = fileNames;
        var strLocationValue = locations;
        var strLowerLimitValue = lowerLimits;
        var strUpperLimitValue = upperLimits;
        string strAreaValue = areas;
        string strProductivityValue = productivities;
        string strFobValue = fobs.ToString();
        var libraryLocation = "C:/Users/" + userName + "/Documents/R/win-library/3.2";

        string rPath = @"C:\Program Files\R\R-3.3.2\bin\x64";
        string rHome = @"C:\Program Files\R\R-3.3.2";

        //Initialize REngine
        REngine.SetEnvironmentVariables(rPath, rHome);
        REngine engine = REngine.GetInstance();
        engine.Initialize();

        if (fobs.Length > 1)
        {
            strFobValue = string.Join(" ", fobs);
        }
        else
        {
            strFobValue = "ALL";
        }




        //Declare R Script path
        var rScriptPath = "C:/Users/" + userName + "/Documents/R/RWDir/Loop_Optimization.R";

        //Check to see if there was more than one location selected
        if (strLocationValue.Length > 1)
        {

            foreach (var item in strLocationValue)
            {
                //Set string location to each location value in loop
                var strlocation = item;

                //Add values to parameter list
                var myParams = new List<string>
                {       

                    strModelTypeValue,
                    strFileName,               
                    strlocation,                
                    strLowerLimitValue,
                    strUpperLimitValue,
                    strAreaValue,
                    strProductivityValue,
                    strFobValue,
                    libraryLocation

                };

                //Set myParams as arguments to be sent to r script
                engine.SetCommandLineArguments(myParams.ToArray());
                engine.Evaluate("source('" + rScriptPath + "')");
            }

        }
        //Only one location specified, no need to loop
        else
        {
            foreach (var item in strLocationValue)
            {
                //Set string location to each location value in loop
                var strlocation = item;
                var myParams = new List<string>
                {

                    strModelTypeValue,
                    strFileName,
                    strlocation,
                    strLowerLimitValue,
                    strUpperLimitValue,
                    strAreaValue,
                    strProductivityValue,
                    strFobValue,
                    libraryLocation
                };

                engine.SetCommandLineArguments(myParams.ToArray());
                engine.Evaluate("source('" + rScriptPath + "')");
            }
        }
        //engine.Evaluate("source('" + rScriptPath + "')");
        //engine.Dispose();
        return Json("success", JsonRequestBehavior.AllowGet);

    }

1 个答案:

答案 0 :(得分:-1)

您是否通过附加流程完成了任何调试。