2011-03-04 15 views
7

मैं गणित की प्रारूप बनाने और गणना करने के लिए वेब सेवा बनाने के लिए गणित .Net/Link platform का उपयोग कर रहा हूं। हालांकि मैं इसे काम करने में असमर्थ हूं।गणित .NET/एक Asp.Net अनुप्रयोग में लिंक

मैं इसे इस कोड का उपयोग बनाने के लिए:

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

नोट: SampleCode नेट/लिंक पैकेज (दोनों एक कंसोल अनुप्रयोग और एक WinForms अनुप्रयोग) के साथ दिए गए काम करता है।

संपादित करें: मैं एक asp.net पेज में सांत्वना एप्लिकेशन नमूना मेथेमेटिका के साथ दिया कोड की नकल की और यह मुझे एक ही त्रुटि पहले लोड दे दिया और उसके बाद अनुवर्ती लोड पर यह मुझे दिया:

Error code: 1. MathLink connection was lost. 

EDIT2 : मैं यह उल्लेख करना भूल गया कि जब मेरे ऐप को चलाने के दौरान मेरे पास प्रोमोमन और टास्क मैनेजर खुलता है, तो मैं बता सकता हूं कि Math.exe शुरू होता है लेकिन यह तुरंत निकलता है, जो उन त्रुटि कोड को पूर्ण समझ में आता है ... लेकिन यह समझाता नहीं है कि क्यों क्या हुआ।

+0

यह अगर यह निर्दिष्ट नहीं _MathLinkArguments साथ काम करता है आपके प्रश्न से स्पष्ट नहीं है। क्या आपने जांच की है कि _Internel कर्नेल वैरिएबल शून्य नहीं है? मुझे यकीन है कि आप जानते हैं कि लिंकनाम सिर्फ एक स्ट्रिंग है, यह जटिल नहीं होना चाहिए। एक अद्वितीय पहचानकर्ता ठीक है। क्या आपके गणित में कर्नेल = लिंकलांच [ "सी: \\ प्रोग्राम फ़ाइलें \\ वोल्फ्राम \ अनुसंधान \\ गणित \\ 7.0 \\ MathKernel.exe" <> "-लिंकमोड लॉन्च -लिंकनाम अद्वितीय आईडीडिफायर 123" ; प्रिंट करें [ लिंक रीड [कर्नेल]]; LinkClose [kernel] ' – Sasha

+0

यह _MathLinkArguments के साथ काम नहीं करता है, लेकिन त्रुटि यह है कि यह केवल लटकता है और पृष्ठ को कभी लोड नहीं करता है। साथ ही, जब मैं गणित में कोड के उस भाग को चलाता हूं तो मुझे 'इनपुट नाम पैकेट [[1]: =] ' –

+0

मिलता है क्या आपने पोस्ट किए गए कोड के बराबर स्टैंड-अलोन सीएस प्रोग्राम बनाने का प्रयास किया था? क्या यह काम करता है ? – Sasha

उत्तर

2

Asp.net (कम से कम आईआईएस 7.5 में) .NET/Link को काम करने की अनुमति देने के लिए आपको वेब साइट के लिए ऐप पूल पर loadUserProfile संपत्ति को सक्षम करने की आवश्यकता है।

मुझे पूरी तरह से यकीन नहीं है कि यह क्यों मामला है, लेकिन मुझे इसे डीबग करने का प्रयास करते समय जो मिला, उससे कुछ चीजें हैं जो उपयोगकर्ता की प्रोफ़ाइल से प्राप्त की गई हैं। मुझे इस तथ्य के बारे में पता है कि कर्नेल का डिफ़ॉल्ट स्थान है, जो बताता है कि मैं इसका तर्क क्यों नहीं दे सकता था, और इसलिए मैं केवल यह मान सकता हूं कि अन्य चीजों की भी आवश्यकता है और प्रोफ़ाइल के बिना यह निर्धारित नहीं कर सका ।

लेकिन जो भी कारण यह आवश्यक है, यह है, या कम से कम यह एक फिक्स है यदि आपको अपने आवेदन में ऐसी ही समस्याएं मिल रही हैं।

1

मुझे .NET WinForm एप्लिकेशन में एक ही त्रुटि मिली।

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

मैथ कर्नेल को तुरंत चालू करने के बाद पैकेज को लोड करने पर त्रुटि हुई।

इसे हल करने के लिए आप कुछ सेकंड प्रतीक्षा कर सकते हैं और फिर MathKernel को ठीक करने के लिए ठीक काम कर सकते हैं। इस राज्य है जहां अभी भी डेटा हो सकता है के दौरान चल निम्न स्थितियों में दोनों झूठे हैं:

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

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

संपादित करें:

मैं फिर से त्रुटि प्राप्त कर लिया है और इस बार समस्या का निर्धारण करने में सक्षम था।

कमांड लाइन का उपयोग करके MathKernel खोलें।exe और त्रुटि संदेश देखने:

enter image description here