2017-04-04 12 views
0

私は、Rスクリプトにパラメータを送るASP.NET MVCアプリケーションを持っています.Rスクリプトはファイルを生成し、それをローカルのフォルダに入れます。このプロセスは、Visual Studioを使用してローカルマシン上で完璧に動作しますが、IISを公開して使用すると出入りします。以下は、私がR.NETを初期化する方法と、AJAXを介してこれらの値を私のビューから取得する方法です。なぜR.NETはローカルで動作しますが、IISでの動作は停止しますか?

また、これらのPATHの両方を私のシステム環境変数に入れました。

私のOSを再起動した直後に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); 

    } 
+0

ウェブアプリケーションがIIS上で動作することがありますが、OSを再起動した後でのみ動作し、その後再び停止します。 – Jwoody30

答えて

-1

プロセスをアタッチしてデバッグを行ったことがありますか?

+0

私は考えるengine.Initialize();これは問題を引き起こしています –

+0

IISで動作するためのengine.Initialize()の代替手段はありますか?私は今、デスクトップアプリケーションとしてこれを作り直しています。なぜなら、私はIISに非常に問題があったからです – Jwoody30

関連する問題