【问题标题】:Mathematica .Net/Link in an Asp.Net applicationAsp.Net 应用程序中的 Mathematica .Net/Link
【发布时间】:2011-03-04 20:47:23
【问题描述】:

我正在使用 Mathematica .Net/Link platform 创建一个 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 启动但它立即退出,这使得这些错误代码完全有意义......但没有解释为什么会发生这种情况.

【问题讨论】:

  • 从你的问题中不清楚它是否在没有指定 _MathLinkArguments 的情况下工作。您是否检查 _InternelKernel 变量不为空?我相信您知道链接名称只是一个字符串,不必这么复杂。唯一标识符是可以的。以下是否适用于您的 Mathematica kernel = LinkLaunch[ "C:\\Program Files\\Wolfram \ Research\\Mathematica\\7.0\\MathKernel.exe" <> " -linkmode launch -linkname uniqueIdentifier123"]; Print[ LinkRead[kernel]]; LinkClose[kernel]
  • 它在没有 _MathLinkArguments 的情况下也不起作用,但错误是它只是挂起并且从不加载页面。另外,当我在 Mathematica 中运行那段代码时,我得到 InputNamePacket[In[1]:= ]
  • 您是否尝试过创建一个与发布代码等效的独立 CS 程序?有用吗?
  • 我没有创建一个,但它带有 2 位示例代码,其中一个接受 args 的参数,我使用此处指定的参数来制作它,并且它有效.然后我尝试创建一个新页面,该页面从控制台应用程序代码中复制/粘贴代码,并且每次刷新时都会给我同样的错误(第一次)然后Error code: 1. MathLink connection was lost.

标签: c# asp.net .net wolfram-mathematica


【解决方案1】:

要允许 .Net/Link 在 Asp.net 中工作(至少在 IIS 7.5 中),您需要在网站的应用程序池中启用属性 loadUserProfile

我不完全确定为什么会出现这种情况,但是根据我在尝试调试时发现的情况,可以从用户的个人资料中获取一些信息。我知道内核的默认位置是,这解释了为什么我不能在没有参数的情况下使用它,所以我只能假设还需要其他东西并且没有配置文件它无法确定.

但无论出于何种原因,这都是必需的,或者如果您在自己的应用程序中遇到类似的问题,它至少是一个修复。

【讨论】:

    【解决方案2】:

    我在 .Net WinForm 应用程序中遇到了同样的错误。

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

    在实例化 MathKernel 后直接加载包时发生错误。

    要解决它,您可以等待几秒钟,然后实例化 MathKernel 就可以正常工作。在这种可能仍有数据在进行中的状态下,以下条件均为错误:

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

    编辑:

    我再次收到错误,这次能够确定问题。

    使用命令行打开 MathKernel.exe 并查看错误消息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      相关资源
      最近更新 更多