我是ASP.net编程的新手,我不太了解多线程的事情。当我在我的ASP.net应用程序/网站上调试时,它显示了一个我不熟悉的标签:并行监视,它是关于多线程的东西。当我搜索多线程时,我只找到有关如何使用多线程等的示例。问题是,我没有使用任何类进行线程化。
我的代码中包含了什么:
是我的主页:
Index.aspx.cs
:
protected void Button1_Click(object sender, EventArgs e)
{
string Message = PLC1.Connect();
lblClock.Text = Message;
}
和
protected void Timer1_Tick(object sender, EventArgs e)
{
if(PLC1.x_ConnectionEstablished)
{
string Message;
Message = PLC1.ReadDB(1, 0, 17);
if (Message == "OK")
{
lblClock.Text = "Connected and retrieved value!!";
}
else
{
lblClock.Text = Message;
}
}
else
{
lblClock.Text = "No connection! Press the button!";
}
}
我的班级:PLC.cs
:
public string Connect()
{
int Result;
string Message;
Result = s7_S7Client.ConnectTo(s_IP, i_Rack, i_Slot);
Message = s7_S7Client.ErrorText(Result);
x_ConnectionEstablished = s7_S7Client.Connected();
return Message;
}
public string ReadDB(int a_DBnr, int a_startPos, int a_size)
{
int Result;
string Message = "";
try
{
Result = s7_S7Client.DBRead(a_DBnr, a_startPos, a_size, bArray_Buffer);
Message = s7_S7Client.ErrorText(Result);
}
catch (Exception E)
{
Message = E.Message;
}
return Message;
}
当我按下按钮(在调试时),它会跳转到我的PLC类的Connect()
。它实际上在x_ConnectionEstablished
上给出了真实性。但是当我的Timer触发它时,它不会进入我的if语句。因为它说:x_ConnectionEstablished = false
。
我可以将代码添加到计时器中,但每次进入计时器时我都不想执行连接方法(这就是我使用此{{1}的原因} for。
所以我的问题是这个线程是如何工作的,如何在有或没有线程的情况下让我的网站正常运行?
答案 0 :(得分:1)
您的CSV example:
0 , 20
0 , 15
0 , -40
0 , -1000
...
和PLC1
似乎会创建某种持久连接,例如通过TCP套接字或串行连接。
您不希望从HTTP后端创建这样的连接,因为HTTP是(或至少应该是)无状态的:每个请求都以干净的平板,所有变量(以及连接)开始)从之前的请求中消失了。
因此,我建议将此逻辑包装到管理连接到PLC的Windows服务中,并通过WCF公开此服务的逻辑。
然后,您的Web应用程序可以通过WCF向服务发出请求,然后服务将与PLC通信并维护连接。