asp.net和多线程以及C#对象

时间:2017-01-11 08:34:45

标签: c# asp.net

我是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。

所以我的问题是这个线程是如何工作的,如何在有或没有线程的情况下让我的网站正常运行?

1 个答案:

答案 0 :(得分:1)

您的CSV example: 0 , 20 0 , 15 0 , -40 0 , -1000 ... PLC1似乎会创建某种持久连接,例如通过TCP套接字或串行连接。

您不希望从HTTP后端创建这样的连接,因为HTTP是(或至少应该是)无状态的:每个请求都以干净的平板,所有变量(以及连接)开始)从之前的请求中消失了。

因此,我建议将此逻辑包装到管理连接到PLC的Windows服务中,并通过WCF公开此服务的逻辑。

然后,您的Web应用程序可以通过WCF向服务发出请求,然后服务将与PLC通信并维护连接。

相关问题