2011-07-07 57 views
2

所以我有一個按鈕和四個標籤在我的.aspx頁面。當我點擊按鈕時,我希望標籤在睡眠幾秒後分配文本。不過,我希望他們在完成後回覆頁面。Asp.net僞造異步回傳來模擬真實的服務

即,標籤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> 

現在所有的標籤回發的同時網頁上的所有方法都運行完畢後。我在現實生活中需要這種功能,在這種情況下,會從幾個不同的網絡調用一個服務,每個網絡在完成計算後發佈信息。因爲用戶等待他們完成並且有些可能需要長達五分鐘,所以在他們到達時顯示這些信息非常重要。

此服務超出我的控制範圍,無法更改。

非常感謝您的幫助!對不起,因爲newb錯誤:)

編輯:我現在已經能夠在一個WCF Web服務是異步的這項工作。它工作得很好,但在AsyncCompleted方法中,它在所有線程並行完成後回發。我需要它們在線程完成時出現在.aspx頁面的更新面板中。任何想法如何做到這一點?

在此先感謝。

回答

1

如果它不針對精通技術的用戶,您可以簡單地通過延遲客戶端來完成此任務,而不是在服務器端等待(並消耗資源)。您可以使用簡單的javascript setTimeout或jQuery延遲函數。看一看,如果這就是你想要的 - 它可能會讓你的工作變得更容易 - 一個假等待。但請注意,誰擅長計算機/瞭解編程將會注意到你在做什麼。

+0

我會在客戶端嘗試一下,看看那是怎麼回事。我不在乎這是否是一個愚蠢的解決方案。這是爲了驗證aspx頁面的概念,而不是異步服務。感謝所有的幫助。 – joncodo

1

轉移到AJAX並允許在客戶端而不是服務器端處理返回。只要這是服務器端,在完成響應流之前,您必須等到完整答案。

理論上,你可以沖洗響應流的一部分,但如果#3先返回,#1和#2仍然等待,所以這是一個非選項。另外,如果你不使用CSS進行格式化,你最終可能不得不等待一個結束表標籤等,這會在#2和/或#3之前停止填充#1。

如果您轉移到AJAX,您將進行個別調用並在返回時進行填充。目前JQuery是來自MS的客戶端庫推送。