2017-05-08 108 views
0

我使用的是VS2013,Matlab 2015Ra和IIS 10.Net框架是4.5.2,EF是6. Matlab 2015Ra,VS2013和IIS在Windows 10上也是64位,這也是64位。我將MatLab腳本編譯爲網絡程序集。當我使用開發服務器,程序沒有錯誤工作正常,而當它部署在IIS程序失敗與此異常消息執行MATLAB代碼:IIS上的matlab代碼不起作用

MATLAB的運行實例無法初始化 SEGV - 嚴重錯誤

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.ApplicationException:MATLAB的運行實例無法初始化 SEGV - 嚴重錯誤

完整的堆棧跟蹤是:

[ApplicationException: The MATLAB runtime instance could not be initialized 
    segv - SEVERE ERROR] MathWorks.MATLAB.NET.Utility.MWMCR..ctor(String componentId, String componentPath, Stream embeddedCtfStream, Boolean isLibrary) +282 

    [Exception: The MATLAB runtime instance could not be initialized] 
    MathWorks.MATLAB.NET.Utility.MWMCR..ctor(String componentId, String componentPath, Stream embeddedCtfStream, Boolean isLibrary) +736 
    BuildCrop.Cropper..cctor() +390 

    [Exception: MWArray assembly failed to be initialized] 
    BuildCrop.Cropper..ctor() +43 
    EMS.Controllers.AdministratorController.Test_CreateCrop() +186 
    lambda_method(Closure , ControllerBase , Object[]) +87 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 
    controllerContext, IDictionary`2 parameters) +229 

System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39 
    System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +67 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod (IAsyncResult asyncResult)+42 
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +72 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +386 
    System.Web.Mvc.Async.AsyncControllerActionInvoker. EndInvokeActionMethodWithFilters (IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +38 
    System.Web.Mvc.Async.<>c__DisplayClass21. 
    <BeginInvokeAction>b__1e(IAsyncResult asyncResult) +186 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction (IAsyncResult asyncResult) +38 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36 
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38 
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +44 
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65 
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38 
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication. IExecutionStep.Execute() +399 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +157 

我已經看過了各種解決方案和文章,也嘗試過由Leon提出的解決方案https://www.mathworks.com/matlabcentral/answers/29604-issues-with-iis-6-and-matlab-runtime和L.Mar在http://do-the-right-things.blogspot.com.au/2011/06/caveat-in-using-matlab-dll-in-aspnet.html

我還增加了IIS中的server.scripttimeout,但同樣的錯誤messa ge出現。

PS:Matlab安裝在服務器上,dll是從相同的Matlab創建的。

+0

通常像MatLab這樣的額外程序會使用某種類型的運行時庫,如果您沒有安裝該程序則無法正常工作 - 例如,它可能需要visual C++運行時庫2015.請檢查額外的庫是否需要它並只安裝它。 – Aristos

+0

我檢查了我的系統安裝了MS Visual C++ 2015(x86)。這是你所指的同一個運行時間。我也遵循並清除了我係統中的緩存。仍然沒有工作。如果有人知道這一點。 – whisps11

+0

我不知道它可能需要什麼運行時庫 - 這是你需要找出0,如果在這裏的情況下 – Aristos

回答

0

更新

所以,如果有人可能會陷入同樣的​​情況,我會解釋我是如何解決它,這樣它可能會節省一些時間。這個錯誤特別與mcrcachex.x有關(在我的例子中,mcrcache8.5因爲我使用了Matlab 2015a)。從C:\ Users \\ AppData \ Local \ Temp \\移動此文件夾時,不要刪除其內容,因爲「.mcr_cache_index」在某種程度上具有重要性。在刪除之前,將該文件「.mcr_cache_index」複製到某個安全的地方,然後在環境變量中創建MCR_CACHE_ROOT並提供到c:\ mcrcahex.x的路徑後,將以後保存的「.mcr_cache_index」文件粘貼到c:\ mcrcahex.x路徑。之後,您可以從以前的路徑中刪除mcrcachex.x,以便mcr在執行時不會再次查看這些文件夾。還提供訪問權限,以便編譯器可以在其中創建文件。