0
我正在尋找一些使用Windows.Web.Http.HttpClient類的UWP應用程序的幫助。我是UWP開發新手,所以使用HttpClient也是新的。在UWP應用程序中使用HttpClient需要在第二次調用之前進行第一次調用的結果
我有兩個需要相對較快的Web服務調用。第一次調用需要從用戶輸入,並將結果張貼到數據庫
電話1:
sharedHttpResponseMessage = await sharedHttpClient.PostAsync(resourceUri, new HttpStringContent(""));
jsonObject = JsonObject.Parse(await sharedHttpResponseMessage.Content.ReadAsStringAsync());
的調用上面將一個數據庫上執行一些工作,根據結果的第二個電話會拉數據向用戶顯示一個列表。
召喚2:
sharedHttpResponseMessage = await sharedHttpClient.GetAsync(resourceUri);
jsonObject = JsonObject.Parse(await sharedHttpResponseMessage.Content.ReadAsStringAsync());
發生的第二次調用沒有返回正確的數據的問題。就好像第二次電話獲得結果之前第一次電話還沒有完成。這是HttpClient的工作方式,由於asnyc調用,或者有辦法把它們放在一起,所以它們被稱爲回來?我見過HttpRequestHandler,但不知道這是我需要的答案。
感謝您的任何幫助。
編輯1:這是我打電話的功能。
// This code is called from a button press
private async void RunSetPromptTest()
{
getPrompt = "http://internalwebaddress/set_response";
if (!Uri.TryCreate(getPrompt, UriKind.Absolute, out resourceUri))
return;
sharedHttpClient.DefaultRequestHeaders.Clear();
sharedHttpClient.DefaultRequestHeaders.Add("pn_user_session_id", "17855");
sharedHttpClient.DefaultRequestHeaders.Add("pv_prompt_type", "set_manual_response");
sharedHttpClient.DefaultRequestHeaders.Add("pv_value", Value.Text);
try
{
sharedHttpResponseMessage = await sharedHttpClient.PostAsync(resourceUri, new HttpStringContent(""));
jsonObject = JsonObject.Parse(await sharedHttpResponseMessage.Content.ReadAsStringAsync());
returnStatus = jsonObject.GetNamedString("pv_status_return");
if (returnStatus == "E")
Prompt.Text = jsonObject.GetNamedString("pv_message_return");
else
{
RunGetPromptTest();
}
rootPage.NotifyUser("Completed", MainPage.NotifyType.StatusMessage);
}
catch (Exception ex)
{
rootPage.NotifyUser("Error: " + ex.Message, MainPage.NotifyType.ErrorMessage);
}
}
// This code section is called within the above procedure RunSetPromptTest.
private async void RunGetPromptTest()
{
getPrompt = "http://internalwebaddress/get_prompt";
if (!Uri.TryCreate(getPrompt, UriKind.Absolute, out resourceUri))
return;
sharedHttpClient.DefaultRequestHeaders.Clear();
sharedHttpClient.DefaultRequestHeaders.Add("pn_user_session_id", "17855");
sharedHttpClient.DefaultRequestHeaders.Add("pv_prompt_type", "get_manual_prompt_internal");
try
{
sharedHttpResponseMessage = await sharedHttpClient.PostAsync(resourceUri, new HttpStringContent(""));
jsonObject = JsonObject.Parse(await sharedHttpResponseMessage.Content.ReadAsStringAsync());
Prompt.Text = jsonObject.GetNamedString("pv_message_return");
promptList = jsonObject.GetNamedString("pv_list_return");
Value.Text = string.Empty;
getPrompt = "http://internalwebaddress/get_prompt_list";
if (!Uri.TryCreate(getPrompt, UriKind.Absolute, out resourceUri))
return;
sharedHttpClient.DefaultRequestHeaders.Clear();
sharedHttpClient.DefaultRequestHeaders.Add("pn_user_session_id", "17855");
sharedHttpClient.DefaultRequestHeaders.Add("pv_prompt_type", "get_manual_list");
sharedHttpResponseMessage = await sharedHttpClient.GetAsync(resourceUri);
jsonObject = JsonObject.Parse(await sharedHttpResponseMessage.Content.ReadAsStringAsync());
JsonArray jsonItem = jsonObject.GetNamedArray("items", new JsonArray());
rootPage.NotifyUser("Completed", MainPage.NotifyType.StatusMessage);
}
catch (Exception ex)
{
rootPage.NotifyUser("Error: " + ex.Message, MainPage.NotifyType.ErrorMessage);
}
}
簡而言之,它應該工作,並且問題隱藏在您未分享的細節中。這是什麼意思「它不會返回正確的數據」。你有證據嗎?兩次調用的整個方法是怎樣的? – Liero
沒有看到兩個呼叫的情況下很難說你的問題是什麼 – maccettura
我已經添加了我打電話的代碼。我更新了一下,以更好地反映我所看到的。 –