2017-03-08 3 views
0

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); 
    } 
} 
+0

要するに、問題は共有されていない詳細に隠されています。 「正しいデータを返さない」とはどういう意味ですか?証拠はありますか? 2つの呼び出しを行うメソッド全体がどのように見えますか? – Liero

+0

お互いの文脈で2つの呼び出しを見ることなく、あなたの問題が何であるか言うのは難しい – maccettura

+0

私は呼び出しているコードを追加しました。私はそれを私が見ているものをよりよく反映するように少し更新しました。 –

答えて

0

かなりの検索の後、このスレッドの解像度は2014から見つかりました。私は同じ問題を抱えていましたが、私のポストの時には同じ問題だったことに気づいていませんでした。これを作成

HTTPClient every time returns the same string

は、キャッシュされたデータに問題を修正しました。

Windows.Web.Http.Filters.HttpBaseProtocolFilter filter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter(); 
filter.CacheControl.ReadBehavior = Windows.Web.Http.Filters.HttpCacheReadBehavior.MostRecent; 
関連する問題