Sri Reddy Sri Reddy - 1 year ago 683
C# Question

How to send/receive SOAP request and response using C#?

private static string WebServiceCall(string methodName)
WebRequest webRequest = WebRequest.Create("http://localhost/AccountSvc/DataInquiry.asmx");
HttpWebRequest httpRequest = (HttpWebRequest)webRequest;
httpRequest.Method = "POST";
httpRequest.ContentType = "text/xml; charset=utf-8";
httpRequest.Headers.Add("SOAPAction:" + methodName);
httpRequest.ProtocolVersion = HttpVersion.Version11;
httpRequest.Credentials = CredentialCache.DefaultCredentials;
Stream requestStream = httpRequest.GetRequestStream();
//Create Stream and Complete Request
StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.ASCII);

StringBuilder soapRequest = new StringBuilder("<soap:Envelope xmlns:xsi=\"\"");
soapRequest.Append(" xmlns:xsd=\"\" ");
soapRequest.Append("<GetMyName xmlns=\"\"><name>Sam</name></GetMyName>");

//Get the Response
HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse();
StreamReader srd = new StreamReader(wr.GetResponseStream());
string resulXmlFromWebService = srd.ReadToEnd();
return resulXmlFromWebService;

I tried different code to send/receive soap responses but all fail with the same
"The remote server returned an error: (500) Internal Server Error."

I can access the same service using SoapUI. Am able to invoke the method too. I read in this forum that the reason why am I getting 500 error could be wrong header. I verified the header, it seems to be ok. I would appreciate if someone can help.

Following is the sample SOAP request:

POST /AccountSvc/DataInquiry.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: ""

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="" xmlns:xsd="" xmlns:soap="">
<GetMyName xmlns="">

I used the above sample request to execute the method and it worked. Here is the Soap request that I passed:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="" xmlns:xsd="" xmlns:soap=""><soap:Body><GetMyName xmlns=""><name>Sam</name></GetMyName></soap:Body></soap:Envelope>


I have updated the code above in WebServiceCall that worked for .asmx service. But the same code didn't work for WCF service. Why?

Answer Source

The urls are different.

  • http://localhost/AccountSvc/DataInquiry.asmx


  • /acctinqsvc/portfolioinquiry.asmx

Resolve this issue first, as if the web server cannot resolve the URL you are attempting to POST to, you won't even begin to process the actions described by your request.

You should only need to create the WebRequest to the ASMX root URL, ie: http://localhost/AccountSvc/DataInquiry.asmx, and specify the desired method/operation in the SOAPAction header.

The SOAPAction header values are different.

  • http://localhost/AccountSvc/DataInquiry.asmx/ + methodName



You should be able to determine the correct SOAPAction by going to the correct ASMX URL and appending ?wsdl

There should be a <soap:operation> tag underneath the <wsdl:operation> tag that matches the operation you are attempting to execute, which appears to be GetMyName.

There is no XML declaration in the request body that includes your SOAP XML.

You specify text/xml in the ContentType of your HttpRequest and no charset. Perhaps these default to us-ascii, but there's no telling if you aren't specifying them!

The SoapUI created XML includes an XML declaration that specifies an encoding of utf-8, which also matches the Content-Type provided to the HTTP request which is: text/xml; charset=utf-8

Hope that helps!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download