Ask a questionAsk a question
 

AnswerHow to use XMLSerializer to post to a https url

  • Monday, November 02, 2009 8:12 PMThaneHubbell Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    I have XML generated using the helper class generated by using XSD.EXE against a schema.

    I can serialize the xml successfully to a file using:

     

    XmlSerializer ser = new XmlSerializer(typeof(MessageType));

     

    TextWriter w = new StreamWriter(@"c:\ss.xml");

    ser.Serialize(w, msg);

    w.Close();

    What I need to do is POST this (it's not SOAP) to an https url.  Then I need to retrieve the response and decode it using the helper classes. 

    I looked at MSDN documentation for the XmlSerializer but it discusses SOAP.

    This ought to be really simple - but I can't find a code example.

    Anyone have a sample?

    Thanks!

Answers

  • Tuesday, November 03, 2009 3:01 PMJohn SaundersMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    Go look at the HttpWebRequest class.

    John Saunders
    WCF is Web Services. They are not two separate things.
    Use WCF for All New Web Service Development, instead of legacy ASMX or obsolete WSE
    Use File->New Project to create Web Service Projects
  • Wednesday, November 04, 2009 5:56 PMThaneHubbell Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    Here's some working code.  I'll ask a separate question, however, in a minute:

                WebRequest req = WebRequest.Create("https://myurl");

                req.Method = "POST";

                req.ContentType = "text/xml";

                Stream dataStream = req.GetRequestStream();

                ser.Serialize(dataStream, msg);

                dataStream.Close();

                WebResponse response = req.GetResponse();

                status = ((HttpWebResponse)response).StatusDescription;

                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);

                // Read the content.

                MessageType rsp = new MessageType();

                XmlSerializer serr = new XmlSerializer(typeof(MessageType));

                rsp = (MessageType)serr.Deserialize(reader);

                reader.Close();

     

    • Marked As Answer byThaneHubbell Wednesday, November 04, 2009 5:56 PM
    •  

All Replies

  • Tuesday, November 03, 2009 3:01 PMJohn SaundersMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    Go look at the HttpWebRequest class.

    John Saunders
    WCF is Web Services. They are not two separate things.
    Use WCF for All New Web Service Development, instead of legacy ASMX or obsolete WSE
    Use File->New Project to create Web Service Projects
  • Tuesday, November 03, 2009 7:23 PMThaneHubbell Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Thanks John,

    That's the right answer I think.  Getting the response back into something I can use with the helper classes is also a challenge.  Once I get the service to return some XML then I'll see if I am putting it in the right place.  I'll post my code after it works in hopes that will assist others.
  • Wednesday, November 04, 2009 5:56 PMThaneHubbell Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    Here's some working code.  I'll ask a separate question, however, in a minute:

                WebRequest req = WebRequest.Create("https://myurl");

                req.Method = "POST";

                req.ContentType = "text/xml";

                Stream dataStream = req.GetRequestStream();

                ser.Serialize(dataStream, msg);

                dataStream.Close();

                WebResponse response = req.GetResponse();

                status = ((HttpWebResponse)response).StatusDescription;

                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);

                // Read the content.

                MessageType rsp = new MessageType();

                XmlSerializer serr = new XmlSerializer(typeof(MessageType));

                rsp = (MessageType)serr.Deserialize(reader);

                reader.Close();

     

    • Marked As Answer byThaneHubbell Wednesday, November 04, 2009 5:56 PM
    •  
  • Wednesday, November 04, 2009 7:49 PMJohn SaundersMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    FYI, you need a few using blocks:

        WebRequest req = WebRequest.Create("https://myurl");
        req.Method = "POST";
        req.ContentType = "text/xml";

        using (Stream dataStream = req.GetRequestStream())
        {
            XmlSerializer ser = new XmlSerializer(typeof (MessageType));
            ser.Serialize(dataStream, msg);
        }

        using (WebResponse response = req.GetResponse())
        {
            string status = ((HttpWebResponse) response).StatusDescription;
            using (Stream responseStream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(responseStream))
                {
                    XmlSerializer serr = new XmlSerializer(typeof (MessageType));
                    MessageType rsp = (MessageType) serr.Deserialize(reader);
                }
            }
        }

    John Saunders
    WCF is Web Services. They are not two separate things.
    Use WCF for All New Web Service Development, instead of legacy ASMX or obsolete WSE
    Use File->New Project to create Web Service Projects