2011-03-04 11 views
7

Estoy usando Mathematica .Net/Link platform para crear un servicio web para formatear y calcular problemas matemáticos. Sin embargo, no puedo hacerlo funcionar.Mathematica .Net/Link en una aplicación Asp.Net

que crearlo utilizando este código:

_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(); 

El valor de _MathLinkArguments es -linkmode launch -linkname \"C:\\Program Files\\Wolfram Research\\Mathematica\\7.0\\Math.exe\".

Este fragmento de código se llama desde el método Application_Start del archivo global.asax.cs.

Cuando se llega a la llamada WaitAndDiscardAnswer() que da el error de servidor:

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

Nota: El SampleCode dado con el paquete .NET/Link (tanto una aplicación de consola y una aplicación de Windows Forms) funciona.

Editar: He copiado el código de ejemplo aplicación de consola dado con Mathematica en una página asp.net y me dio el mismo error la primera carga y luego en cargas posteriores me dio:

Error code: 1. MathLink connection was lost. 

Edit2 : Olvidé mencionar que cuando tengo procmon y el administrador de tareas abierto mientras ejecuto mi aplicación, puedo decir que Math.exe se inicia pero sale inmediatamente, lo que hace que esos códigos de error tengan sentido ... pero no explica por qué eso pasó.

+0

No es claro por su pregunta si funciona sin _MathLinkArguments especificados. ¿Comprobaste que la variable _InternelKernel no es nula? Estoy seguro de que sabías que linkname es solo una cadena, no tiene por qué ser tan complicado. Un identificador único está bien. ¿Funciona el siguiente en su Mathematica 'kernel = LinkLaunch [ " C: \\ Archivos de programa \\ Wolfram \ Research \\ Mathematica \\ 7.0 \\ MathKernel.exe "<> " -linkmode launch -linkname uniqueIdentifier123 "] ; Imprimir [ LinkRead [kernel]]; LinkClose [kernel] ' – Sasha

+0

tampoco funciona sin _MathLinkArguments, pero el error es que simplemente se cuelga y nunca carga la página. Además, cuando ejecuto ese fragmento de código en Mathematica obtengo 'InputNamePacket [In [1]: =]' –

+0

¿Intentó crear un programa de CS independiente con el equivalente del código publicado? Funciona ? – Sasha

Respuesta

2

Para permitir que .Net/Link funcione en Asp.net (al menos en IIS 7.5) debe habilitar la propiedad loadUserProfile en el grupo de aplicaciones para el sitio web.

No estoy del todo seguro de por qué este es el caso, pero por lo que encontré al intentar depurar esto, hay algunas cosas que se obtienen del perfil del usuario. Sé a ciencia cierta que la ubicación predeterminada del kernel es, lo que explica por qué no podría usarlo sin argumentos, por lo que solo puedo suponer que también se necesitan otras cosas y sin el perfil no podría determinar que .

Pero cualquiera que sea la razón es esto es necesario, es, o al menos es una solución si está obteniendo problemas similares como este en su propia aplicación.

1

Recibí el mismo error en una aplicación .Net WinForm.

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

El error ocurrió al cargar el paquete directamente después de crear el MathKernel.

Para resolverlo, puede esperar un par de segundos y luego crear instancias del MathKernel funciona bien. Durante este estado en el que aún puede haber los datos en marcha las siguientes condiciones son falsas:

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

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

Editar:

que he recibido el error de nuevo y esta vez era capaz de determinar el problema.

Usando una línea de comando, abra MathKernel.exe y ver el mensaje de error:

enter image description here

Cuestiones relacionadas