【问题标题】:C#.NET Serial port access from web application从 Web 应用程序访问 C#.NET 串行端口
【发布时间】:2013-09-28 10:50:07
【问题描述】:

我有一个 C#.NET Web 应用程序,它在 Server 2008 R2、.NET v4、MVC 3、SQL Server 2012 上的 IIS 7 中运行。该应用程序已经在很多机器上运行,但我们刚刚有了一个新的计算机和这台机器上的行为略有不同。

特别是,当应用打开 System.IO.Ports.SerialPort 并写入时,COM1 上实际上没有数据传输。似乎也没有抛出异常。应用继续等待响应,然后超时。

如果我关闭我的应用程序,并使用Termite(终端程序)检查 COM 端口是否正常工作,数据从串行端口输出就可以了。所以串口、驱动等好像没问题。

如果在我的应用程序尝试打开端口时将 Termite 连接到 COM1,我会收到拒绝访问异常(如我所料)。所以我的应用程序似乎确实在尝试访问正确的端口。

但如果没有其他任何东西使用 COM1,我的应用程序不会出现异常 - 但串行端口不会输出任何内容。

有人对如何调试这种情况有任何建议吗?

【问题讨论】:

  • Web 应用程序直接访问像 COM 1 这样的低级 IO 有点不寻常,特别是串行的,服务于并发请求。能否澄清一下运行 Web 应用程序的身份(运行应用程序池的身份)?并且您检查过主机的 Windows 事件吗?
  • 硬件一样吗?这个 COM 不需要特殊设置?是真实的com还是虚拟的com?
  • 感谢 AndyH 和 ilansch。新机器确实有不同的硬件。应用程序池是“ASP.NET v4.0”。我的应用程序有一个线程,它从仪器获取数据并填充数据库。其他(Web 服务)线程可以检索数据并管理数据获取线程。

标签: c# .net windows iis serial-port


【解决方案1】:

我遇到了同样的问题 - C# SerialPort 无法连接到我的串行设备,但 Termite 可以尽管遵循设备手册。

我将SerialPort 属性与我的 Termite 设置进行了比较,发现两者之间存在一些术语差异。例如,Termite 有一个“DTR/DTS”选项(我需要),而 SerialPort 没有任何称为“DTS”的选项。设置 SerialPort 对象的这些属性对我有用:

DtrEnable = true; 
RtsEnable = true;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多