asp.net中操作串口
经常面要在asp.net网站中打开和操作串口,有时会出现串口拒绝访问的问题,今天特定做了个试验,环境:Windows2019虚拟机,asp.net4.6
方案1:
同一套程序,部署两个网站,分别使用两个不同的应用程序池。测试结果如下:
1. 一个网站打开串口时,另一个网站打开时提示串口访问被拒绝,关闭串口操作正常。
2. 网站关闭串口后,另一网站可以正常打开。
3. 已打开串口的网站执行 HttpRuntime.UnloadAppDomain()重启网站后,另一网站可以正常打开串口。即网站重启时会自动关闭串口。
4. 点击IIS中的网站“重新启动”,有时一次并不会触发重启,需要多点几次。或点击“停止”再点击“启动”。
方案2:
同一套程序,部署两个网站,两个网站使用同一个应用程序池。测试结果如下:
好像和方案1差不多。
结论:
还是尽量使用不同的应用程序池,如果打开串口时被拒绝,直接执行HttpRuntime.UnloadAppDomain()可以释放串口占用。
public partial class WebForm1 : System.Web.UI.Page { static SerialPort port = new SerialPort(); protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) port.PortName = "COM1"; } protected void Button1_Click(object sender, EventArgs e) { try { port.Open(); this.TextBox1.Text = "已打开"; } catch (Exception ex) { this.TextBox1.Text = ex.Message; } } protected void Button2_Click(object sender, EventArgs e) { try { port.Close(); this.TextBox1.Text = "已关闭"; } catch (Exception ex) { this.TextBox1.Text = ex.Message; } } protected void Button3_Click(object sender, EventArgs e) { this.TextBox1.Text = "isOpen: " + port.IsOpen.ToString() + ",启动时间:" + Global.启动时间.ToString() ; } protected void Button4_Click(object sender, EventArgs e) { HttpRuntime.UnloadAppDomain(); } }