You can use HttpWebRequest
A test with the game LOTRO, WSDL : https://gls.lotro.com/GLS.DataCenterServer/Service.asmx?WSDL
where I send the command GetDatacenters (in "SOAPAction") to get a list of LOTRO servers :
HttpWebRequest httpWebRequest = ((HttpWebRequest)(WebRequest.Create("https://gls.lotro.com/GLS.DataCenterServer/Service.asmx")));
httpWebRequest.Method = "POST";
string sPostData = @"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
<soap:Body>
<GetDatacenters xmlns=""http://www.turbine.com/SE/GLS"">
<game>LOTRO</game>
</GetDatacenters>
</soap:Body>
</soap:Envelope>";
byte[] byteArray = Encoding.UTF8.GetBytes(sPostData);
// httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.ContentType = "text/xml; charset=utf-8";
httpWebRequest.ContentLength = byteArray.Length;
httpWebRequest.UserAgent = "Test";
Stream dataStream = httpWebRequest.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
httpWebRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "txt");
// httpWebRequest.Headers.Add(HttpRequestHeader.UserAgent, "Test");
httpWebRequest.Headers.Add("SOAPAction", "http://www.turbine.com/SE/GLS/GetDatacenters");
WebResponse webResp = httpWebRequest.GetResponse();
Console.WriteLine("Web response : {0}",((HttpWebResponse)(webResp)).StatusDescription);
using (Stream str = webResp.GetResponseStream())
{
StreamReader streamReader = new StreamReader(str);
string responseFromServer = streamReader.ReadToEnd();
Console.WriteLine(responseFromServer);
}
webResp.Close();