views:

7165

answers:

7

I have the SOAP request in an XML file. I want to post the request to the web service in .net How to implement?

Thanks Senthil

A: 

You need to post the data over HTTP. Use the WebRequest class to post the data. You will need to send other data with the post request to ensure you have a valid SOAP envelope. Read the SOAP spec for all of the details.

BrianLy
lol, "Read the soap spec"... years later he comes back with a beard and gets put in a mental asylum.
duckworth
The SOAP spec is relatively simple, it's the WS-whatever specifications that suck most.
BrianLy
+1  A: 

This isn't the normal way. Usually you would use WCF or the older style web service reference to generate a proxy client for you.

However, what you need to do generally is use HttpWebRequest to connect to the URL and then send the XML in the body of the request.

Lou Franco
+1  A: 

Hi Senthil,

I'm wondering how's the XML generated and is it a valid SOAP message? You can post it via HTTP as suggested by the folks above.

If you want to test if that's going to work, you can give SoapUI a try (for testing I mean).

yclian
+1  A: 

string strSoapMessage = "http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>http://tempuri.org/'>235";

        HttpWebRequest req = (HttpWebRequest) WebRequest.CreateDefault(new Uri(@"http://localhost/SOAP/SOAPSMS.asmx/add")); 

        req.ContentType = "text/xml; charset=utf-8"; 

        req.Method = "POST"; 

        req.Accept = "text/xml"; 

        req.Headers.Add("SOAPAction", @"http://localhost/SOAP/SOAPSMS.asmx/add"); 

        StreamWriter stm = new StreamWriter(req.GetRequestStream(), Encoding.UTF8); 

        stm.Write(strSoapMessage); 

        stm.Flush(); 

        stm.Close();
A: 

Now tryig that code

+1  A: 

Hi,

I've done something like this, building an xml request manually and then using the webrequest object to submit the request:

            string data = "the xml document to submit";
            string url = "the webservice url";
            string response = "the response from the server";

            // build request objects to pass the data/xml to the server
            byte[] buffer = Encoding.ASCII.GetBytes(data);
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = buffer.Length;
            Stream post = request.GetRequestStream();

            // post data and close connection
            post.Write(buffer, 0, buffer.Length);
            post.Close();

            // build response object
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            Stream responsedata = response.GetResponseStream();
            StreamReader responsereader = new StreamReader(responsedata);
            response = responsereader.ReadToEnd();

The string variables at the start of the code are what you set, then you get a string response (hopefully...) from the server.

marcus.greasly
Now i am trying the same code u posted .but i got the unsupported media type
That'll be the request.ContentType, you should try 'text/xml' (I think) for a standard asp.net web service.
marcus.greasly
Its got working for the ASMX service.Now i want post the SOAP request for the WCF service.How to implement that.
A: 

Here's another example--this one in VB:

    Dim manualWebClient As New System.Net.WebClient()

    manualWebClient.Headers.Add("Content-Type", "application/soap+xml;  charset=utf-8")

    ' Note: don't put the <?xml... tag in--otherwise it will blow up with a 500 internal error message!
    Dim bytArguments As Byte() = System.Text.Encoding.ASCII.GetBytes( _
        "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope""&gt;" & System.Environment.NewLine & _
        "  <soap12:Body>" & System.Environment.NewLine & _
        "    <Multiply xmlns=""http://cptr446.class/""&gt;" & System.Environment.NewLine & _
        "      <x>5</x>" & System.Environment.NewLine & _
        "      <y>4</y>" & System.Environment.NewLine & _
        "    </Multiply>" & System.Environment.NewLine & _
        "  </soap12:Body>" & System.Environment.NewLine & _
        "</soap12:Envelope>")
    Dim bytRetData As Byte() = manualWebClient.UploadData("http://localhost/CPTR446.asmx", "POST", bytArguments)

    MessageBox.Show(System.Text.Encoding.ASCII.GetString(bytRetData))
jeffspost