【发布时间】: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