Search code examples
c#windows-phone-7asynchronouswindows-phone-8response

Get the same response


I'm new in windows phone 8 developing. I'm trying to get response asynchronously. Last time i used this method to get response. In my code this is looks like this:

 public async void StartButton_Click(object sender, RoutedEventArgs e)
    {
        cc = new CookieContainer();
        String url = "http://???/play/multi";
        String sss = await createHttpRequestMulti(url); //1st
        url = "http://???/play/check";
        sss = await createHttpRequestMulti(url); //2nd
        while (!sss.StartsWith("["))
            sss = await createHttpRequestMulti(url);
    }
   private async Task<string> createHttpRequestMulti(string url)
    {
        var myHttpRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));
        myHttpRequest.Method = "GET";
        myHttpRequest.AllowAutoRedirect = true;
        myHttpRequest.CookieContainer = cc;
        var response = (HttpWebResponse)await myHttpRequest.GetResponseAsync();
        var reader = new StreamReader(response.GetResponseStream());
        string responseString = await reader.ReadToEndAsync();
        response.Close();
        reader.Close();
        return responseString;
    }

GetResponseAsync looks like:

        public static Task<WebResponse> GetResponseAsync(this WebRequest request)
    {
        return Task.Factory.FromAsync<WebResponse>(
            request.BeginGetResponse, request.EndGetResponse, null);
    }

Everything works fine only in first time i'm using StartButton_Click. In the second time 1st request works fine, but 2nd request dont even send request (i'm using fiddler), but says, that he did. And in result, i have result from 1st request. Help me, please.


Solution

  • This works:

    url + "?param=" + RND.Next(10000)
    

    But i preferred:

        HttpWebRequest request = HttpWebRequest.CreateHttp(url);
        if (request.Headers == null)
        {
            request.Headers = new WebHeaderCollection();
        }
        request.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString();
    

    I found it here.