private const string Request_UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36";
public static string QuerySoapWebService(string url, string methodName, Hashtable pars)
{
url = url.Contains("?WSDL") || url.Contains("?wsdl") ? url : url + "?WSDL";
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "text/xml; charset=utf-8";
request.UserAgent = Request_UserAgent;
//request.Headers.Add("SOAPAction", "\"" + XmlNs + (XmlNs.EndsWith("/") ? "" : "/") + methodName + "\"");
//SetWebRequest(request);
var data = SoapWebServiceEncodeParsToSoap(pars, methodName);
request.ContentLength = data.Length;
var writer = request.GetRequestStream();
writer.Write(data, 0, data.Length);
writer.Close();
var sr = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
var retXml = sr.ReadToEnd();
sr.Close();
return retXml;
}
private static byte[] SoapWebServiceEncodeParsToSoap(Hashtable pars, string methodName)
{
string str = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
str += "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">";
str += " <soapenv:Header>";
str += " <Authorization>Basic " + pars["Authorization"] + "</Authorization>";//网关授权token,没有可不加
str += " <tem:Header>";//不需要登录,可不加
str += " <tem:UserName>" + pars["UserName"] + "</tem:UserName>";
str += " <tem:PassWord>" + pars["PassWord"] + "</tem:PassWord>";
str += " </tem:Header>";
str += " </soapenv:Header>";
str += " <soapenv:Body>";
str += " <tem:" + methodName + ">";
foreach (string item in pars.Keys)
{
str += "<tem:" + item + ">" + pars[item] + "</tem:" + item + ">";
}
str += " </tem:" + methodName + ">";
str += " </soapenv:Body>";
str += "</soapenv:Envelope>";
return Encoding.UTF8.GetBytes(str);
}