1

データを更新した後、Web サービスが呼び出されると、まだ古いデータがフェッチされます。アプリからログアウトしてから再度ログインしたときにのみ、新しいデータが読み込まれます。

protected async override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
            base.OnNavigatedTo(e);
            parameterValue = this.NavigationContext.QueryString["parameter"];

            Uri UserDetailUrl = new Uri(Constants.WebService.ws_single_user + "?user_id=" + parameterValue);
            HttpWebRequest UserDetailRequest = (HttpWebRequest)HttpWebRequest.Create(UserDetailUrl);
            HttpWebResponse UserDetailResponse = (HttpWebResponse)await UserDetailRequest.GetResponseAsync();
            StreamReader reader = new StreamReader(UserDetailResponse.GetResponseStream());
            string UserDetailString = reader.ReadToEnd();
            reader.Close();
            XDocument XUserDetailDoc = XDocument.Load(new StringReader(UserDetailString));
            if (((XElement)XUserDetailDoc.Element("main")).Element("result").Value == "success")
            {
                txtEmail.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("email").Value;
                txtFirstName.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("fname").Value;
                txtLastName.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("lname").Value;
                txtMobile.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("mobile").Value;
            }
    }

Windows 8 Phone アプリ - C# と XAML を使用

GetResponseAsync は次のとおりです。

  public static Task<HttpWebResponse> GetResponseAsync(this HttpWebRequest request)
    {
        var taskComplete = new TaskCompletionSource<HttpWebResponse>();
        request.BeginGetResponse(asyncResponse =>
        {
            try
            {
                HttpWebRequest responseRequest = (HttpWebRequest)asyncResponse.AsyncState;
                HttpWebResponse someResponse = (HttpWebResponse)responseRequest.EndGetResponse(asyncResponse);
                taskComplete.TrySetResult(someResponse);
            }
            catch (WebException webExc)
            {
                HttpWebResponse failedResponse = (HttpWebResponse)webExc.Response;
                taskComplete.TrySetResult(failedResponse);
            }
        }, request);
        return taskComplete.Task;
4

3 に答える 3

4

HttpWebRequestキャッシュされた結果を返しているようです。それを回避するには、いくつかの方法があります。

  1. URL にランダムな文字列を追加して、毎回異なる URL がアクセスされるようにします (したがって、 にwww.example.com/pageなりますwww.example.com/page?random=dsa$fds21)。
  2. 応答キャッシュを無効にします。追加される新しいコードを参照してくださいOnNavigatedTo:

-

HttpWebRequest UserDetailRequest = (HttpWebRequest)HttpWebRequest.Create(UserDetailUrl); 
// Define a cache policy for this request only. 
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.CachePolicy = noCachePolicy;
于 2013-08-17T15:43:28.750 に答える
2

私は同じ問題に直面しており、このようにサーバー側に応答ヘッダーを追加することで解決しました..

response.setHeader("Cache-Control", "no-cache");

これもあなたを助けるかもしれません。

于 2013-08-18T08:02:25.917 に答える
0

独自の API を使用している場合は、その側からキャッシュをオフにしてみてください。

于 2013-08-18T17:39:22.760 に答える