को पूरा करने के लिए अपर्याप्त सिस्टम संसाधन मौजूद हैं। मेरे पास एक .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
}
}
किसी भी मदद की सराहना की जाएगी।
यह त्रुटि के सबनेट में एक टीसीपी/आईपी पता जोड़ें डिवाइस ड्राइवर से आता है। आपको क्लाइंट को अब यूएसबी एमुलेटर को फेंकने के लिए कहें और एक अलग निर्माता से दूसरा प्राप्त करें। –
वास्तव में, वे का उपयोग कर रहे [इन] (http://www.moxa.com/product/nport_5110.htm) और वे सबसे अच्छा होना चाहिए रहे हैं। –