Nghia Nguyen
Nghia Nguyen

Reputation: 2665

httpWebRequest using POST method - receive unexpected xml response

I need to use POST to post a string to server and get xml response, the status code is OK but the string reponse is always ="" (0 byte). Is there any thing wrong with my code? I check the server from blackberry, works fine so the problem must come from my code:

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        s = NavigationContext.QueryString["parameter1"];
        //string strConnectUrl = "http://www.contoso.com/example.aspx";
        base.OnNavigatedTo(e);
  //      DoWebClient(s);
        try
        {

            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(strConnectUrl);
            httpWebRequest.Method = "POST";
            httpWebRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
            // start the asynchronous operation
            httpWebRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), httpWebRequest);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

    private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
    {
       // string XML_REQUEST = "<?xml version=\"1.0\"?><mybroker"><getConnections></mybroker>";
        string post = "?&track=love";

        try
        {
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

            // End the operation
            Stream postStream = request.EndGetRequestStream(asynchronousResult);

            // Convert the string into a byte array.
            byte[] postBytes = Encoding.UTF8.GetBytes(post);

            // Write to the request stream.
            postStream.Write(postBytes, 0, postBytes.Length);
            postStream.Close();

            // Start the asynchronous operation to get the response
            request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
    static Stream str;
    static string st;
    private static void GetResponseCallback(IAsyncResult asynchronousResult)
    {

            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

            // End the operation
            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
            HttpStatusCode rcode = response.StatusCode;
            Stream streamResponse = response.GetResponseStream(); 
            StreamReader streamRead = new StreamReader(streamResponse);

        //****THIS ALWAYS RETURN "" VALUE, EXPECT TO RETURN XML STRING****
            string responseString = streamRead.ReadToEnd();

            //Console.WriteLine(responseString);
            // Close the stream object
            streamResponse.Close();
            streamRead.Close();
            // Release the HttpWebResponse
            response.Close(); 
    }

*EDIT** The code work, however the server return parameter require the Ampersand(&) which is not allow in silverlight framework I think, remove the & char server response but the result wasn't correct. I will ask a new question refer this Ampersand

Upvotes: 0

Views: 4410

Answers (3)

bbaia
bbaia

Reputation: 1183

The post value should be "track=love".

I tried and it worked but the response is gzip encoded.

Upvotes: 0

E.Z. Hart
E.Z. Hart

Reputation: 5747

Fiddler says that the request is good, and that the response really is blank. If it's working from Blackberry and not from WP7, could the server be doing some user agent checking and not returning anything because it doesn't recognize the WP7 user agent?

Also, it looks like you're POSTing a query string ("?&track=love") which is sort of unusual. Are you sure that's the right data to be sending in your request?

Upvotes: 0

1adam12
1adam12

Reputation: 984

Have checked your call using Fiddler. The server is returning an empty body. Your code is working correctly. The problem is server side.

Upvotes: 1

Related Questions