Windows.Web.Http.HttpClientクラスを使用してUWPアプリケーションに関するヘルプを探しています。私はUWP開発に新しいので、HttpClientを使うことも新しいです。UWPアプリケーションでHttpClientを使用すると、2回目の呼び出しが行われる前に最初の呼び出しの結果が必要です
2つの呼び出しは、Webサービスに対して比較的迅速に行う必要があります。最初の呼び出しは、ユーザからの入力を受け取り、データベースに結果をポスト
コール1:
sharedHttpResponseMessage = await sharedHttpClient.PostAsync(resourceUri, new HttpStringContent(""));
jsonObject = JsonObject.Parse(await sharedHttpResponseMessage.Content.ReadAsStringAsync());
コールは、上記データベースにいくつかの作業を実行し、その結果に応じて第2の呼がデータを引っ張ってきますユーザにリストを表示する。
電話2:
sharedHttpResponseMessage = await sharedHttpClient.GetAsync(resourceUri);
jsonObject = JsonObject.Parse(await sharedHttpResponseMessage.Content.ReadAsStringAsync());
2番目の呼び出しは、正しいデータを返すされていないで発生する問題。 2番目の呼び出しが結果を得る前に、最初の呼び出しが完了していないかのようです。これは、asynccの呼び出しのためにHttpClientが動作する方法ですか?あるいは、スタックにそれらをまとめて入れる方法がありますか?私は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);
}
}
要するに、問題は共有されていない詳細に隠されています。 「正しいデータを返さない」とはどういう意味ですか?証拠はありますか? 2つの呼び出しを行うメソッド全体がどのように見えますか? – Liero
お互いの文脈で2つの呼び出しを見ることなく、あなたの問題が何であるか言うのは難しい – maccettura
私は呼び出しているコードを追加しました。私はそれを私が見ているものをよりよく反映するように少し更新しました。 –