2013-02-19 51 views
5

को पूरा करने के लिए अपर्याप्त सिस्टम संसाधन मौजूद हैं। मेरे पास एक .NET 4 विंडोज सेवा है जिसे मैंने समय-समय पर लिखा है (आमतौर पर एक बार) एक सीरियल पोर्ट पर बाहरी डिवाइस के साथ संचार करता है। सभी सेवा के सभी अच्छा काम करता है, लेकिन एक ग्राहक, हर अब और फिर के लिए, SerialPort.Open() के लिए एक कॉल निम्नलिखित अपवाद फेंकता है:SerialPort.Open() IOException फेंकता है - अनुरोधित सेवा

System.IO.IOException: Insufficient system resources exist to complete the requested service. 
at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) 
at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) 
at System.IO.Ports.SerialPort.Open() 

अपवाद के आधार पर, यह होगा कि सर्वर संसाधन समाप्त हो रही है लगता होगा , लेकिन ऐसा लगता है कि यह मामला नहीं है। सीपीयू कम या ज्यादा निष्क्रिय है और इसमें बहुत सारी मेमोरी और डिस्क है।

SerialPort.Open() के अन्य IOExceptions को फेंकने के बहुत सारे उल्लेख हैं और मैंने Zach Saw's SerialPortFixer लागू किया है, लेकिन ऐसा लगता है कि यह एक अलग समस्या को हल करता है। (बहुत सरलीकृत)

यहाँ मैं क्या कर रहा हूं, इसका एक उदाहरण। इस वर्ग के कुछ उदाहरण (विभिन्न सीरियल पोर्ट नामों का उपयोग करके) हर समय स्मृति में होते हैं और फिर रन() विधि को प्रत्येक उदाहरण के लिए दिन में लगभग एक बार बुलाया जाता है।

public class Collector 
{ 
    private SerialPort _port; 
    private string _portName; 

    public void Run() 
    { 
     try 
     { 
      // Run Zach Saw's IOException workaround 
      SerialPortFixer.Execute(_portName); 

      using (_port = new SerialPort(_portName, 9600, Parity.None, 8, StopBits.One)) 
      { 
       _port.DataReceived += PortDataReceived; 
       _port.ErrorReceived += PortErrorReceived; 
       _port.Handshake = Handshake.None; 
       _port.DtrEnable = true; 
       _port.RtsEnable = true; 

       _port.Open(); 
       // Do the stuff 
       _port.Close(); 
      } 
     } 
     catch (Exception e) 
     { 
      // Handle exception 
     } 
    } 

    private void PortDataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     // Do other stuff 
    } 

    private void PortErrorReceived(object sender, SerialErrorReceivedEventArgs e) 
    { 
     // Log error 
    } 
} 

किसी भी मदद की सराहना की जाएगी।

+0

यह त्रुटि के सबनेट में एक टीसीपी/आईपी पता जोड़ें डिवाइस ड्राइवर से आता है। आपको क्लाइंट को अब यूएसबी एमुलेटर को फेंकने के लिए कहें और एक अलग निर्माता से दूसरा प्राप्त करें। –

+0

वास्तव में, वे का उपयोग कर रहे [इन] (http://www.moxa.com/product/nport_5110.htm) और वे सबसे अच्छा होना चाहिए रहे हैं। –

उत्तर

2

इस प्रश्न का उत्तर यह है कि क्लाइंट द्वारा उपयोग किया जाने वाला सीरियल पोर्ट सर्वर एक वाई-फाई संस्करण (मोक्सा एनपोर्ट डब्ल्यू 2150 प्लस) था और यह अपवाद तब होता है जब सीरियल पोर्ट सर्वर में वाई-फाई कनेक्टिविटी समस्याएं होती हैं।

0

एनपोर्ट 5150 के साथ एक ही समस्या थी। नेटवर्क टाइमआउट (एनपोर्ट प्रशासक में) ने मेरी समस्या हल की।

0

मुझे हाल ही में एक ही समस्या थी, मेरे लिए संकल्प यह था कि मैं गलती से एक डिवाइस के साथ सीधा-डीबी 9 केबल का उपयोग कर रहा था जिसके लिए एक नल मॉडेम डीबी 9 केबल की आवश्यकता थी। एक बार जब मैं एक नल मॉडेम केबल में बदल गया तो त्रुटि गायब हो गई और डिवाइस ठीक से काम कर रहा था।

जब मैं मोक्सा कहा जाता है, वे कुछ अन्य बातों के सुझाव की कोशिश करना कि इस समस्या को जन्म दे सकता:

  • एंटी वायरस सॉफ्टवेयर संचार
  • बजाय ड्राइवर प्रबंधक उपयोगिता उपयोग करने का प्रयास के साथ हस्तक्षेप किया जा सकता है NPort प्रशासक जब COM पोर्ट (Windows मशीनों पर)
0

मैं इस त्रुटि थी और मेरी समस्या यह है कि NPort प्रशासन पाया और सीरियल पोर्ट लेकिन नेटवर्क कार्ड की IP4 पता करने के लिए स्थापित किया गया था प्रोग्राम किया था की स्थापना डीएचसीपी। मुझे लगता है कि यह एक सिस्टम अद्यतन के दौरान हुआ था। कि से

रिकवरी:

  1. नेटवर्क इंटरफेस
  2. NPort प्रशासन में सीरियल पोर्ट पुन: असाइन करना