Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SerialPort.Open()引发IOException-系统资源不足,无法完成请求的服务_C#_.net_Serial Port_Ioexception - Fatal编程技术网

C# SerialPort.Open()引发IOException-系统资源不足,无法完成请求的服务

C# SerialPort.Open()引发IOException-系统资源不足,无法完成请求的服务,c#,.net,serial-port,ioexception,C#,.net,Serial Port,Ioexception,我编写了一个.NET 4 Windows服务,它通过串行端口定期(通常一天一次)与外部设备通信。总而言之,这项服务工作得很好,但对于一个客户,偶尔调用SerialPort.Open()会引发以下异常: System.IO.IOException: Insufficient system resources exist to complete the requested service. at System.IO.Ports.InternalResources.WinIOError(Int32 e

我编写了一个.NET 4 Windows服务,它通过串行端口定期(通常一天一次)与外部设备通信。总而言之,这项服务工作得很好,但对于一个客户,偶尔调用
SerialPort.Open()
会引发以下异常:

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()
任何帮助都将不胜感激。

此问题的答案是客户端使用的串行端口服务器是wi-fi版本(Moxa NPort W2150 Plus),当串行端口服务器存在wi-fi连接问题时,会出现异常。

NPort 5150也存在同样的问题。增加网络超时(在NPort Administrator中)解决了我的问题。

我最近也遇到了同样的问题,我的解决方案是,我意外地将直通DB9电缆与需要空调制解调器DB9电缆的设备一起使用。一旦我换成一根空调制解调器电缆,错误就消失了,设备正常工作

当我打电话给Moxa时,他们建议尝试一些可能导致这个问题的其他方法:

  • 防病毒软件可能会干扰通信
  • 在设置COM端口(在Windows计算机上)时,请尝试使用驱动程序管理器实用程序而不是Nport Administrator

我有这个错误,我的问题是NPort管理部门发现并编程了串行端口,但网卡的IP4地址被设置为DHCP。我认为这是在系统更新期间发生的

从中恢复:

  • 在网络接口的子网中添加TCP/IP地址
  • 在NPort管理中重新分配串行端口

  • 此错误来自设备驱动程序。告诉你的客户扔掉他现在拥有的USB仿真器,从另一个制造商那里买一个。事实上,他们正在使用其中一个,而且他们应该是最好的。
    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
        }
    }