asp.net将在大约15分钟内发送响应

asp.net将在大约15分钟内发送响应,asp.net,Asp.net,我希望当客户端发送到我的网页请求时,我的网页得到请求和活动计时器,并等待大约15分钟,然后检查客户端,以便连接并响应json字符串。 我的服务器代码是: string name, count; protected void Page_Load(object sender, EventArgs e) { name = Request.QueryString["name"]; count = Request.QueryString["count"];

我希望当客户端发送到我的网页请求时,我的网页得到请求和活动计时器,并等待大约15分钟,然后检查客户端,以便连接并响应json字符串。 我的服务器代码是:

 string name, count;
    protected void Page_Load(object sender, EventArgs e)
    {
        name = Request.QueryString["name"];
        count = Request.QueryString["count"];
        Timer1.Interval = 15000;
        Timer1.Enabled = true;



    }
protected void Timer1_Tick(object sender, EventArgs e)
    {
        if (Response.IsClientConnected)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            string json=jss.Serialize("در خواست شما تایید شد");
            Response.Clear();
            Response.Write(json);
            Response.End();


        }
        else
        {
            Response.End();

        }

    }

我怎样才能做到这一点?

仅通过服务器端编译的C代码无法实现您想要实现的目标

问题是,您希望客户端每十五分钟发送一次请求,以获取最新的JSON,但您正试图告诉服务器这样做

有很多更好的方法来完成你想要做的事情,比如说,比15分钟计时器更好,但这里有一种方法可以通过JavaScript实现:

首先,公开服务器的API调用—获取JSON的调用

然后,在客户端的脚本节点中,即在您发送的HTML中的脚本标记中,定义以下函数:

function refreshDataAndUpdatePage() {
    $.ajax({
        url: 'your/url/to/the/action',
        success: function (data) {
             // use data JSON to update page.
             // then, call this function again recursively after a timeout of 15 minutes = 900 s = 900,000 ms
             setTimeout(refreshDataAndUpdatePage, 900000);
        }
}

当然,也可以打电话给某个地方。

根据您的评论:谢谢,例如,我希望客户向我的服务器发送订单,当系统经理接受订单时,回复客户:您的订单已接受

您需要包含jQuery来完成这一点

由于查询字符串中有名称和计数,我认为这将帮助您识别客户或将其更改为订单ID,因此您可以在javascript块中的.aspx页面上使用以下内容:

$(document).ready(function(){

    setTimeout(function()
    {
       location.reload();
    }, (15 * 60 * 1000));  // (that's 15 mins that I couldn't be bothered to work out...)

});
您的服务器端代码可能是:

protected void Page_Load(object sender, EventArgs e)
{
    var name = Request.QueryString["name"];
    var count = Request.QueryString["count"];
    if(OrderAccepted(name, count))
    {
        // display message to user
    }
}

private bool OrderAccepted(string name, string count)
{
    // do what you need to do to find out if the order is accepted.
}
如果订单不被接受,您可能还想尝试只运行javascript,这样它就不会继续运行。但15分钟的间隔是相当长的时间,大多数人在知道订单被接受后会关闭浏览器


希望这有帮助。

长时间超时(如15分钟)不是一个好主意,因为服务器和访问者之间的路由器可能会关闭底层TCP连接。我建议最多1分钟,并确保您的客户定期重新轮询服务器,以防服务器关闭。@谢谢,例如,我希望客户向我的服务器发送订单,当系统经理接受订单时,回复客户:您的订单已接受。您必须使用javascript在客户端呼叫服务器以检查电子邮件。此代码将不起作用!当您试图调用响应时,响应不存在。@Aristos谢谢,我该怎么做?此外,应用程序池将被IIS回收,这意味着在发生这种情况时,内存状态(如计时器)将丢失。