我本来是写单片机程序的,刚接触asp.net,最近想做一个通过浏览器可以读写服务器端串口的东西,用WPF操作.net下的SerailPort类是没有问题的。但在Asp.net里通过一般处理程序来操作就有问题,只有前两下起作用。不知道是为什么?因为还没发布网站,应该不是权限的问题,再说前两次是起作用的。handler的PR方法里代码如下:只是测试,写的很随意。在网页上就是一个按钮点击时请求这个一般处理程序,PR方法里的代码就是给串口发一条数据,单片机收到一次把一个灯开关一次。目前的现象就是用WPF建立的应该程序很正常。但通过网页来操作时,只有前两次起作用,一般处理程序也一直在响应我的请求,我最下面给它返回了一个数据。我发的数据就都是0,0低电平,我用万用表就能检测出来,起作用时确实收到数据了,不起作用时确实没有收到数据。排除硬件上的问题。我的操作系统是win8.
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; SerialPort port = new SerialPort("COM4", 9600); port.Open(); byte[] bytes = new byte[1024]; port.Write(bytes, 0, bytes.Length); port.Close(); context.Response.Write("a"+context.Request.QueryString["cmd"]); }
还有就是只要把网页关掉重新打开,就会再起作用两次。想着是不是什么服务端缓存的机制,但实在是不了解,望指点一下。
ASP.NET的请求是多线程的,有可能多次并发请求,那么你这种写法肯定会出问题,串口打开是独占的,同时请求的时候是要出问题的.
建议用windows服务来和串口交互,ASP.NET和windows服务交互,这种方式处理起来比较稳定.
感谢你的指点,我刚查资料看着别人遇到这样问题时,也大部分给的是这样的建议。是不是很少有在ASP.net的服务端做这类的操作的?如果是的话,我就不考虑这方式了,这个问题也就不管了。
还有我刚也看了看怎么用.net创建服务,大概还知道,但asp.net和自己要创建的这个服务之间的通信方式是什么?用socket吗?
@Helloafer: 是的,基本不会ASP.NET直接跟设备交互的.
ASP.NET和服务之间可以采用标准的WCF方式来通信,服务暴露wcf接口,ASP.NET调用