【问题标题】:Asp.net Faking Async Postbacks to Emulate a real serviceAsp.net 伪造异步回发以模拟真实服务
【发布时间】:2023-03-31 23:37:01
【问题描述】:

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

即。标签 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 页面上的更新面板中。关于如何做到这一点的任何想法?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    如果它不是针对精通技术的用户,您可以简单地通过在客户端延迟而不是在服务器端等待(并消耗资源)来完成此任务。您可以使用简单的 javascript setTimeout 或 jQuery 延迟函数。看看,如果这是你想要的——假装等待,它可能会让你的工作更轻松。但请注意,擅长计算机/懂编程的人会注意到你在做什么。

    【讨论】:

    • 我会在客户端尝试一下,看看效果如何。我不在乎这是否是一个愚蠢的解决方案。这是为了证明 aspx 页面而不是异步服务的概念。感谢所有的帮助。
    【解决方案2】:

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

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

    如果您迁移到 AJAX,您可以进行单独的调用并在它们返回时进行填充。目前 JQuery 是 MS 推送的客户端库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2017-06-17
      相关资源
      最近更新 更多