asp.net中操作串口

经常面要在asp.net网站中打开和操作串口,有时会出现串口拒绝访问的问题,今天特定做了个试验,环境:Windows2019虚拟机,asp.net4.6

方案1:

同一套程序,部署两个网站,分别使用两个不同的应用程序池。测试结果如下:

1. 一个网站打开串口时,另一个网站打开时提示串口访问被拒绝,关闭串口操作正常。

2. 网站关闭串口后,另一网站可以正常打开。
3. 已打开串口的网站执行 HttpRuntime.UnloadAppDomain()重启网站后,另一网站可以正常打开串口。即网站重启时会自动关闭串口。

4. 点击IIS中的网站“重新启动”,有时一次并不会触发重启,需要多点几次。或点击“停止”再点击“启动”。

 

方案2:

同一套程序,部署两个网站,两个网站使用同一个应用程序池。测试结果如下:

好像和方案1差不多。

 

结论:

还是尽量使用不同的应用程序池,如果打开串口时被拒绝,直接执行HttpRuntime.UnloadAppDomain()可以释放串口占用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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();
      }
  }

  

posted @   81  阅读(130)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示