पर शीर्ष पर है, मैं एक साधारण विंडो सेवा बना रहा हूं और जब मैं डीबग पर जाता हूं तो मुझे त्रुटि मिलती है, "अभिव्यक्ति का मूल्यांकन नहीं कर सकता क्योंकि मूल फ्रेम कॉल के शीर्ष पर है ढेर।"। साथ ही, जब मैं रिलीज में सेवा बनाता हूं और इसे चलाता हूं तो बस लटकता है।अभिव्यक्ति का मूल्यांकन नहीं कर सकता क्योंकि एक देशी फ्रेम कॉल स्टैक
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyService1() };
ServiceBase.Run(ServicesToRun);
}
यही सब है कि Program.cs फ़ाइल है, जहां यह सामान्य रूप से ServiceBase.Run (ServicesToRun) लाइन पर लटका दिया जाता है।
जो कुछ भी मैं ढूंढने में सक्षम हूं, वह केवल अभिव्यक्ति से संबंधित है जिसका मूल्यांकन नहीं किया जा रहा है क्योंकि कोड अनुकूलित किया गया है या एएसपीनेट और प्रतिक्रिया.ऑरेक्ट से निपटने के लिए है।
सेवा के लिए कोड।
public TruckRateClearService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
tmrProcess.Enabled = true;
}
protected override void OnCustomCommand(int command)
{
base.OnCustomCommand(command);
if (command == 129)
{
OnStart(null);
}
}
protected override void OnStop()
{
tmrProcess.Enabled = false;
}
private void tmrProcess_Tick(object sender, EventArgs e)
{
tmrProcess.Enabled = false;
try
{
eventLog.WriteEntry("Clearing Truck Rates Start" + DateTime.Now.ToString());
TruckRateClearingAgent.Process();
eventLog.WriteEntry("Clearing Truck Rates Finished" + DateTime.Now.ToString());
}
catch (Exception ex)
{
eventLog.WriteEntry(ex.ToString(), EventLogEntryType.Error);
}
tmrProcess.Enabled = true;
}
internal void Run()
{
tmrProcess_Tick(tmrProcess, null);
}
आंतरिक शून्य रन() को हाल ही में ईरेन एर्न्सोमेज़ द्वारा टिप्पणियों में दिए गए सुझाव पर जोड़ा गया था। उनका विचार मेरे तर्क को डीबग करने में मदद के लिए बहुत उपयोगी रहा है जब तक कि मैं बाकी को समझ नहीं पाता।
मैं मूल कॉल स्टैक में प्रवेश करने में सक्षम था और यह एक स्थान पर स्थित है, 76F17094 ret। अब मुझे नहीं पता कि यह क्या है लेकिन शायद कोई और करेगा।
इसके अलावा, जब मैं सेवा शुरू करता हूं और इसे वीएस से जोड़ने में देखता हूं तो मैं इसके दो उदाहरण देख रहा हूं। एक सामान्य है। Exe और दूसरा एक .vshost.exe है। जब मैं अन्य सेवाओं को शुरू करता हूं तो मैं केवल डीबगर के हिस्से को संसाधित करने के लिए अटैच में .exe फ़ाइल देखता हूं। ऐसा इसलिए हो सकता है क्योंकि कोई v4 फ्रेमवर्क (.vshost.exe सेवा) पर है और दूसरा v2 (एकल .exe सेवा) फ्रेमवर्क पर है?
मेरा मानना है कि मुझे यह काम मिल गया है। ऐसा लगता है कि समस्या का उपयोग करने वाले टाइमर के साथ समस्या झूठ बोल रही थी। मैं जिस मूल टाइमर का उपयोग कर रहा था वह एक सिस्टम था। Windows.Forms टाइमर। मैंने इसे सिस्टम टिमर्स पर स्विच किया। टिमर्स और सबकुछ फिर से काम करना शुरू कर दिया। अभी भी वीएस को संलग्न नहीं कर सकता है लेकिन मैं आंतरिक रन() विधि का उपयोग करके इसे अभी भी डीबग कर सकता हूं।
मैंने सब कुछ डाला और आदेश को निष्पादित किया और यह काम किया। हालांकि, जब मैं समारोह से बाहर निकल गया तो यह मुझे आगे आगे बढ़ने नहीं देगा। और जब मैं डीबग-> ब्रेक ऑल गया, यह उसी बिंदु पर था जिसमें सेवा विफल रही थी। मुझे लगता है कि मैं यहाँ कुछ गलत कर रहा हूँ। –
आप किस तरह की विफलता देख रहे हैं? एक लटका या अपवाद? –
जैसा कि मैं पहले प्राप्त कर रहा था "अभिव्यक्ति का मूल्यांकन नहीं कर सकता ..."। क्या सेवा बस ServiceBase.Run (ServicesToRun) भाग पर लटका दी जाएगी। –