asp.net中操作串口

发布时间 2023-10-31 16:16:45作者: 81

经常面要在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();
        }
    }