Mathematica .Net / Link в приложении Asp.Net - PullRequest
7 голосов
/ 04 марта 2011

Я использую платформу Mathematica .Net / Link для создания веб-службы для форматирования и вычисления математических задач. Однако я не могу заставить его работать.

Я создаю его, используя этот код:

_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\".

Этот фрагмент кода вызывается из метода Application_Start файла global.asax.cs.

При получении вызова WaitAndDiscardAnswer() выдается ошибка сервера:

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

Примечание: SampleCode, предоставляемый с пакетом .NET / Link (консольное приложение и приложение WinForms), работает.

Edit: Я скопировал пример кода консольного приложения, предоставленного Mathematica, на страницу asp.net, и он выдал мне ту же ошибку при первой загрузке, а затем при последующих загрузках:

Error code: 1. MathLink connection was lost.

Edit2: Я забыл упомянуть, что когда я запускаю procmon и диспетчер задач во время работы моего приложения, я могу сказать, что Math.exe запускается, но он немедленно завершает работу, что делает код ошибки понятным ... но не объясняет, почему это произошло .

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

Чтобы разрешить .Net / Link работать в Asp.net (по крайней мере, в IIS 7.5), необходимо включить свойство loadUserProfile в пуле приложений для веб-сайта.

Я не совсем уверен, почему это так, но из того, что я обнаружил, пытаясь отладить это, есть некоторые вещи, которые получены из профиля пользователя.Я точно знаю, что ядром по умолчанию является местоположение, которое объясняет, почему я не мог использовать его без аргументов, и поэтому я могу только предположить, что нужны и другие вещи, и без профиля он не может определить, что.

Но какова бы ни была причина, это требуется, это так, или, по крайней мере, это исправление, если у вас возникают подобные проблемы в вашем собственном приложении.

1 голос
/ 26 февраля 2013

Я получил ту же ошибку в приложении .Net WinForm.

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

Ошибка при загрузке пакета сразу после создания MathKernel.

Чтобы решить эту проблему, вы можете подождать пару секунд, а затем создание экземпляра MathKernel работает нормально. Во время этого состояния, в котором все еще могут находиться данные, оба условия являются ложными:

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

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

Edit:

Я снова получил ошибку и на этот раз смог определить проблему.

С помощью командной строки откройте MathKernel.exe и просмотрите сообщение об ошибке:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...