Asp.net伪造异步回发来模拟真实服务

时间:2011-07-07 19:00:39

标签: c# asp.net asp.net-ajax

所以我的.aspx页面上有一个按钮和四个标签。当我单击按钮时,我希望在每次睡眠几秒后为标签分配文本。但是,我希望他们在完成后回复页面。

IE中。标签3需要3秒钟才能完成,标签1需要5秒才能完成,标签2需要7秒才能完成,标签4需要12秒才能完成。

所以在网页上,我们看到标签3出现,然后是标签1等。并非所有三个都同时回来。

的.cs

public string ProvincesAndSatesRetunServiceMethod()
{
    int min = 1000;
    int max = 10000;
    var rand = new Random();
    Stopwatch time = new Stopwatch();
    time.Start();
    System.Threading.Thread.Sleep(rand.Next(min, max));
    time.Stop();
    return " returned from method in " + time.Elapsed.Seconds + "seconds";
}
protected void PostAll_Click(object sender, EventArgs e)
{
    Label1.Text = ProvincesAndSatesRetunServiceMethod();
    Label2.Text = ProvincesAndSatesRetunServiceMethod();
    Label3.Text = "No Responese Received";
    Label4.Text = ProvincesAndSatesRetunServiceMethod();
}

的.aspx

<%--IRE FAKING SERVICE --%>
<asp:UpdatePanel ID="testUpdatePanel" runat="server">
    <ContentTemplate>
        <asp:Button ID="btnAllPosts" runat="server" Text="Post All" onclick="PostAll_Click" autopostback="false" />
        <asp:Button ID="btnReset" runat="server" Text="Reset" onclick="btnReset_Click"  /><br />
        <asp:Label ID="Label1" runat="server" /><br />
        <asp:Label ID="Label2" runat="server"  /><br />
        <asp:Label ID="Label3" runat="server" /><br />
        <asp:Label ID="Label4" runat="server"  /><br />
    </ContentTemplate>
</asp:UpdatePanel>

现在所有标签在所有方法运行完毕后同时在页面上回传。我在现实生活中需要这个功能,在这种情况下,从几个不同的网络调用服务,每个网络在完成计算后发回信息。重要的是要显示这些内容,因为用户正在等待它们完成,有些可能需要长达五分钟。

此服务不受我控制,无法更改。

提前感谢您的帮助!抱歉新的错误:)

编辑:我现在能够在异步的WCF Web服务中完成这项工作。它工作得很好但是在AsyncCompleted方法中,它会在所有线程并行完成后回发。当线程完成时,我需要它们出现在.aspx页面的更新面板内。关于如何做到这一点的任何想法?

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果它不是针对精通技术的用户,您可以通过在客户端延迟而不是在服务器端等待(和消耗资源)来完成此任务。您可以使用简单的javascript setTimeout或jQuery延迟函数。看看,它可能会让你的工作变得更容易,如果这是你想要的 - 假的等待。但请注意,谁熟悉计算机/知道编程会注意到你在做什么。

答案 1 :(得分:1)

转到AJAX并允许在客户端而不是服务器端处理返回。只要这是服务器端,您必须等到完成响应流之后才能得到完整的答案。

理论上,您可以刷新部分响应流,但如果#3首先返回,#1和#2仍然等待,那么这是一个非选项。此外,如果您不使用CSS进行格式化,则可能最终必须等待结束表标记等,这将在#2和/或#3之前停止填充#1。

如果转到AJAX,您可以进行单独的呼叫并在返回时进行填充。目前,JQuery是MS推动客户端库的推动。