簡體   English   中英

Asp.Net應用程序中的Mathematica .Net / Link

[英]Mathematica .Net/Link in an Asp.Net application

我正在使用Mathematica .Net / Link平台創建一個Web服務來格式化和計算數學問題。 但是我無法讓它工作。

我使用以下代碼創建它:

_Log.IpDebug("Starting the Kernel Link");
if (string.IsNullOrEmpty(_MathLinkArguments))
   _InternelKernel = MathLinkFactory.CreateKernelLink();
else
   _InternelKernel = MathLinkFactory.CreateKernelLink(_MathLinkArguments);
_Log.IpDebug("Kernel Link Started");
_InternelKernel.WaitAndDiscardAnswer();

_MathLinkArguments的值是-linkmode launch -linkname \\"C:\\\\Program Files\\\\Wolfram Research\\\\Mathematica\\\\7.0\\\\Math.exe\\"

這段代碼是從global.asax.cs文件的Application_Start方法調用的。

當它到達WaitAndDiscardAnswer()調用時,它會給出服務器錯誤:

Error code: 11. Connected MathLink program has closed the link, but there might still be data underway. 

注意:使用.NET / Link包(控制台應用程序和WinForms應用程序)提供的SampleCode可以正常工作。

編輯:我將Mathematica提供的控制台應用程序示例代碼復制到一個asp.net頁面,它在第一次加載時給了我同樣的錯誤,然后在它給我的后續加載中:

Error code: 1. MathLink connection was lost.

編輯2:我忘了提到當我在運行我的應用程序時打開procmon和任務管理器時,我可以告訴Math.exe啟動但它會立即退出,這使得這些錯誤代碼完全有意義......但是沒有解釋為什么那事發生了。

要允許.Net / Link在Asp.net中工作(至少在IIS 7.5中),您需要在網站的應用程序池上啟用屬性loadUserProfile

我不完全確定為什么會出現這種情況,但是從我在嘗試調試時發現的情況來看,有一些東西是從用戶的配置文件中獲得的。 我知道內核的默認位置,這解釋了為什么我不能在沒有參數的情況下使用它,所以我只能假設其他東西也是需要的,如果沒有配置文件它就無法確定。

但無論出於什么原因,這都是必需的,如果您在自己的應用程序中遇到類似的問題,那么它至少是一個修復。

我在.Net WinForm應用程序中遇到了同樣的錯誤。

mathKernel = new MathKernel();
mathKernel.Compute("<< XYZ`XYZGraphs`");  

在實例化MathKernel后直接加載包時發生錯誤。

要解決它,您可以等待幾秒鍾,然后實例化MathKernel正常工作。 在可能仍有數據的狀態下,以下條件均為假:

if (!MathKernel.IsConnected)
{
    MathKernel.Connect();
}

if (MathKernel.IsComputing)
{
    MathKernel.Abort();
}

編輯:

我再次收到錯誤,這次能夠確定問題。

使用命令行打開MathKernel.exe並查看錯誤消息:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM