For Set a file, and receive a server Response, I use that for sending .csv files:
First I initialize a POST Request:
/// <summary> /// Initialize the POST HTTP request. /// </summary> public void SentPostReport() { string url = "http://MyUrlPerso.com/"; Uri uri = new Uri(url); // Create a boundary for HTTP request. Boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.ContentType = "multipart/form-data; boundary=" + Boundary; request.Method = "POST"; request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), est); allDone.WaitOne(); }
After initialized Request, I send the differents parts of my files (headers + content + footer).
/// <summary> /// Send a File with initialized request. /// </summary> private void GetRequestStreamCallback(IAsyncResult asynchronousResult) { string contentType = "binary"; string myFileContent = "one;two;three;four;five;"; // CSV content. HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; Stream memStream = request.EndGetRequestStream(asynchronousResult); byte[] boundarybytes = System.Text.Encoding.UTF8.GetBytes("\r\n--" + Boundary + "\r\n"); memStream.Write(boundarybytes, 0, boundarybytes.Length); // Send headers. string headerTemplate = "Content-Disposition: form-data; "; headerTemplate += "name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: " + contentType + "\r\n\r\n"; string fileName = "MyFileName.csv"; string header = string.Format(headerTemplate, "file", fileName); byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); memStream.Write(headerbytes, 0, headerbytes.Length); byte[] contentbytes = System.Text.Encoding.UTF8.GetBytes(myFileContent); // send the content of the file. memStream.Write(contentbytes, 0, contentbytes.Length); // Send last boudary of the file ( the footer) for specify post request is finish. byte[] boundarybytesend = System.Text.Encoding.UTF8.GetBytes("\r\n--" + Boundary + "--\r\n"); memStream.Write(boundarybytesend, 0, boundarybytesend.Length); memStream.Flush(); memStream.Close(); allDone.Set(); // Start the asynchronous operation to get the response request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request); }
And, Finnaly, I get The response server response, indicate the file is transmetted.
/// <summary> /// Get the Response server. /// </summary> private static void GetResponseCallback(IAsyncResult asynchronousResult) { HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; try { HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); Stream streamResponse = response.GetResponseStream(); StreamReader streamRead = new StreamReader(streamResponse); string responseString = streamRead.ReadToEnd(); // this is a response server. // Close the stream object streamResponse.Close(); streamRead.Close(); // Release the HttpWebResponse response.Close(); } catch (Exception ex) { // error. } }
This sample works on Windows Phone 7 and Windows Phone 8. This is for send a .csv content. You can adapt this code for send Xml content. Replace just
string myFileContent = "one;two;three;four;five;"; // CSV content. string fileName = "MyFileName.csv";
by your XML
string myFileContent = "<xml><xmlnode></xmlnode></xml>"; // XML content. string fileName = "MyFileName.xml";
webRequest.GetRequestStream()and write your xml to that stream.GetRequestStream()associated with the objectwebRequest.