我使用來自SQL查詢和多個Web請求(每行1個)的數據填充一個asp.net表(最多64行)。前4列快速填充,但最後2列每個Web請求需要6秒。我希望最後2列顯示加載gif,並在網絡調用完成後更新。由於憑證在Web通話中傳遞,我想在服務器端進行通話。Async asp.net表
此外,我想提出多個並行的Web請求。我正在尋找任務,但是我不確定如何在完成特定列的任務時完成表。
我沒有連接到我這樣做的方式,但我還是新編程和我最熟悉C#和asp.net。
現在它看起來像:
AJAX頁面
<div>
<form id="ajaxForm" name="ajaxForm" runat="server">
<asp:table id="aspTbl" runat="server" />
</form>
</div>
與C#的存在:
//SQL Connection
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["webConfigConnection"]);
con.Open();
SqlCommand cmd = new SqlCommand("Select name, type, location, IP from tbl", con)
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read()
{
//web requeststring
sURL;
sURL = "http://" + sdr.GetValue(4).ToString() + "WebRequestURL";
WebRequest request;
request = WebRequest.Create(sURL);
request.Method = "GET";
WebResponse response = request.GetResponse();
StreamReader Report = new StreamReader(response.GetResponseStream());
string ReportString = Report.ReadToEnd().ToString();
Response.Close();
//Populate Table
TableCell tc1 = new TableCell();
TableCell tc2 = new TableCell();
TableCell tc3 = new TableCell();
TableCell tc4 = new TableCell();
tc1.Text = sdr.GetValue(0).ToString();
tc2.Text = sdr.GetValue(1).ToString();
tc3.Text = sdr.GetValue(2).ToString();
tc4.Text = sdr.GetValue(3).ToString();
tc5.Text = ReportString.SubString(paramaters);
tc6.Text = ReportString.SubString(other paramaters);
TableCell[] tcRow = new TableCell[] { tc1, tc2, tc3, tc4, tc5, tc6 };
tr.Cells.AddRange(tcRow);
asptbl.Rows.Add(tr);
}
的目標是讓T5和T6到最初裝載填充GIF和一旦可用子字符串異步更新。
編輯:2015年6月10日
謝謝你的建議。它適用於並行運行Web請求,但仍需要它們在發佈之前全部完成,而在週末我意識到這並不是我可以避免在服務器端運行這個請求。我會嘗試的是讓單元格爲Web請求創建一個jquery ajax調用並更新單元格,以便列1-4可以立即加載,列5和列6將在可用時填充。將提供有關它的工作原理的更新。
編輯:2015年6月10日#2
我更新,以填充細胞空的,而Ajax調用擊中調用這個,我遍歷細胞用JavaScript來填充他們完成時。我現在遇到的問題是,我試圖填充的單元格同時調用同一個表單,並且Web請求正在排隊。
你可以嘗試使用'async'可用的方法 - 比如'ExecuteReaderAsync'和'GetResponseAsync'。 –
單方面說明:您將方法 - 數據層(SQL),服務邏輯和UI(TableCells)中的所有內容混合使用。這絕對是一個不好的方法 – Disappointed
你是否「擁有」你打電話的網絡請求,或者它是第三方?如果你擁有它,它可以被修改爲帶有分隔參數,這樣你就可以嘗試減少被調用的次數,無論是服務器端還是客戶端? –