Search code examples
c#web-servicesgetwindows-phonehttpwebrequest

HttpWebRequest always show the same result C#


First thank you for the help.I have a problem which makes me crazy...

In fact, I make a GET request in my web service that I made, and it works fine, for one time. If I do THE SAME request after, the request doesn't reach my web service. The result that I receive is the same that the first... It's a mistake because I do some update between two requests. The result expected is different. If I restart the app on the windows phone, the result is updated.
In my case, the goal is to get my contact's position. I receive the same position in spite of I update their positions.

        private void Button_Click(object sender, RoutedEventArgs e)
    {
        System.Uri targetUri = new System.Uri("http://My-Ip-Address:8080/WhereAreMyFriends/webresources/positions/getMyContactsPositions/0660066000");
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
        request.Method = "GET";
        request.Accept = "application/xml";
        request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
    }

    private void ReadWebRequestCallback(IAsyncResult callbackResult)
    {
        try
        {
            HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);

            if (myResponse.StatusCode == HttpStatusCode.OK)
            {
                using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
                {
                    string results = httpwebStreamReader.ReadToEnd();
                    Dispatcher.BeginInvoke(() =>
                    {
                        MessageBox.Show(results);//NavigationService.Navigate(new Uri("/CodeVerification.xaml", UriKind.Relative));
                    });
                }
                myResponse.Close();
            }
            else
            {
                Dispatcher.BeginInvoke(() =>
                {
                    MessageBox.Show("Status Code incorrect");
                    myResponse.Close();
                });
            }
        }
        catch (Exception e)
        {
            Dispatcher.BeginInvoke(() =>
            {
                MessageBox.Show(e.Message);
            });
        }
    }

Solution

  • Its a caching problem. To add "&random="+DateTime.Now.Ticks" code in your Url ay solve your problem.

    private void Button_Click(object sender, RoutedEventArgs e)
         {
            System.Uri targetUri = new System.Uri("http://My-Ip-Address:8080/WhereAreMyFriends/webresources/positions/getMyContactsPositions/0660066000"+"&random="+DateTime.Now.Ticks);
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
            request.Method = "GET";
            request.Accept = "application/xml";
            request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
         }
    

    Another approach is

    private void Button_Click(object sender, RoutedEventArgs e)
             {
                System.Uri targetUri = new System.Uri("http://My-Ip-Address:8080/WhereAreMyFriends/webresources/positions/getMyContactsPositions/0660066000");
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
                request.Headers[HttpRequestHeader.CacheControl] = "no-cache"; 
                request.Headers[HttpRequestHeader.Pragma] = "no-cache"; 
                request.Headers[HttpRequestHeader.IfModifiedSince] = dateTime.Now.ToString();
                request.Method = "GET";
                request.Accept = "application/xml";
                request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
             }
    

    request.Headers[HttpRequestHeader.IfModifiedSince] = dateTime.Now.ToString(); this forces your request to always be performed - this made the trick for me.