这里给大家带来的是动态webservice调用接口并读取解析返回结果的具体示例,非常的简单,注释也很详细,小伙伴们可以参考下。
using System; using System.Collections; using System.IO; using System.Net; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Hishop.Plugins { /// <summary> /// 利用WebRequest/WebResponse进行WebService调用的类 /// </summary> public class WebServiceCaller { #region Tip:使用说明 //webServices 应该支持Get和Post调用,在web.config应该增加以下代码 //<webServices> // <protocols> // <add name=\"HttpGet\"/> // <add name=\"HttpPost\"/> // </protocols> //</webServices> //调用示例: //Hashtable ht = new Hashtable(); //Hashtable 为webservice所需要的参数集 //ht.Add(\"str\", \"test\"); //ht.Add(\"b\", \"true\"); //XmlDocument xx = WebSvcCaller.QuerySoapWebService(\"http://localhost:81/service.asmx\", \"HelloWorld\", ht); //MessageBox.Show(xx.OuterXml); #endregion /// <summary> /// 需要WebService支持Post调用 /// </summary> public static XmlDocument QueryPostWebService(String URL, String MethodName, Hashtable Pars) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + \"/\" + MethodName); request.Method = \"POST\"; request.ContentType = \"application/x-www-form-urlencoded\"; SetWebRequest(request); byte[] data = EncodePars(Pars); WriteRequestData(request, data); return ReadXmlResponse(request.GetResponse()); } /// <summary> /// 需要WebService支持Get调用 /// </summary> public static XmlDocument QueryGetWebService(String URL, String MethodName, Hashtable Pars) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + \"/\" + MethodName + \"?\" + ParsToString(Pars)); request.Method = \"GET\"; request.ContentType = \"application/x-www-form-urlencoded\"; SetWebRequest(request); return ReadXmlResponse(request.GetResponse()); } /// <summary> /// 通用WebService调用(Soap),参数Pars为String类型的参数名、参数值 /// </summary> public static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars) { if (_xmlNamespaces.ContainsKey(URL)) { return QuerySoapWebService(URL, MethodName, Pars, _xmlNamespaces[URL].ToString()); } else { return QuerySoapWebService(URL, MethodName, Pars, GetNamespace(URL)); } } private static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars, string XmlNs) { _xmlNamespaces[URL] = XmlNs;//加入缓存,提高效率 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL); request.Method = \"POST\"; request.ContentType = \"text/xml; charset=utf-8\"; request.Headers.Add(\"SOAPAction\", \"\\\"\" + XmlNs + (XmlNs.EndsWith(\"/\") ? \"\" : \"/\") + MethodName + \"\\\"\"); SetWebRequest(request); byte[] data = EncodeParsToSoap(Pars, XmlNs, MethodName); WriteRequestData(request, data); XmlDocument doc = new XmlDocument(), doc2 = new XmlDocument(); doc = ReadXmlResponse(request.GetResponse()); XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable); mgr.AddNamespace(\"soap\", \"http://schemas.xmlsoap.org/soap/envelope/\"); String RetXml = doc.SelectSingleNode(\"//soap:Body/*/*\", mgr).InnerXml; doc2.LoadXml(\"<root>\" + RetXml + \"</root>\"); AddDelaration(doc2); return doc2; } private static string GetNamespace(String URL) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL + \"?WSDL\"); SetWebRequest(request); WebResponse response = request.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); XmlDocument doc = new XmlDocument(); doc.LoadXml(sr.ReadToEnd()); sr.Close(); return doc.SelectSingleNode(\"//@targetNamespace\").Value; } private static byte[] EncodeParsToSoap(Hashtable Pars, String XmlNs, String MethodName) { XmlDocument doc = new XmlDocument(); doc.LoadXml(\"<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:Envelope>\"); AddDelaration(doc); //XmlElement soapBody = doc.createElement_x_x(\"soap\", \"Body\", \"http://schemas.xmlsoap.org/soap/envelope/\"); XmlElement soapBody = doc.CreateElement(\"soap\", \"Body\", \"http://schemas.xmlsoap.org/soap/envelope/\"); //XmlElement soapMethod = doc.createElement_x_x(MethodName); XmlElement soapMethod = doc.CreateElement(MethodName); soapMethod.SetAttribute(\"xmlns\", XmlNs); foreach (string k in Pars.Keys) { //XmlElement soapPar = doc.createElement_x_x(k); XmlElement soapPar = doc.CreateElement(k); soapPar.InnerXml = ObjectToSoapXml(Pars[k]); soapMethod.AppendChild(soapPar); } soapBody.AppendChild(soapMethod); doc.DocumentElement.AppendChild(soapBody); return Encoding.UTF8.GetBytes(doc.OuterXml); } private static string ObjectToSoapXml(object o) { XmlSerializer mySerializer = new XmlSerializer(o.GetType()); MemoryStream ms = new MemoryStream(); mySerializer.Serialize(ms, o); XmlDocument doc = new XmlDocument(); doc.LoadXml(Encoding.UTF8.GetString(ms.ToArray())); if (doc.DocumentElement != null) { return doc.DocumentElement.InnerXml; } else { return o.ToString(); } } /// <summary> /// 设置凭证与超时时间 /// </summary> /// <param name=\"request\"></param> private static void SetWebRequest(HttpWebRequest request) { request.Credentials = CredentialCache.DefaultCredentials; request.Timeout = 10000; } private static void WriteRequestData(HttpWebRequest request, byte[] data) { request.ContentLength = data.Length; Stream writer = request.GetRequestStream(); writer.Write(data, 0, data.Length); writer.Close(); } private static byte[] EncodePars(Hashtable Pars) { return Encoding.UTF8.GetBytes(ParsToString(Pars)); } private static String ParsToString(Hashtable Pars) { StringBuilder sb = new StringBuilder(); foreach (string k in Pars.Keys) { if (sb.Length > 0) { sb.Append(\"&\"); } //sb.Append(HttpUtility.UrlEncode(k) + \"=\" + HttpUtility.UrlEncode(Pars[k].ToString())); } return sb.ToString(); } private static XmlDocument ReadXmlResponse(WebResponse response) { StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); String retXml = sr.ReadToEnd(); sr.Close(); XmlDocument doc = new XmlDocument(); doc.LoadXml(retXml); return doc; } private static void AddDelaration(XmlDocument doc) { XmlDeclaration decl = doc.CreateXmlDeclaration(\"1.0\", \"utf-8\", null); doc.InsertBefore(decl, doc.DocumentElement); } private static Hashtable _xmlNamespaces = new Hashtable();//缓存xmlNamespace,避免重复调用GetNamespace } }
//调用并读取解析返回结果 DataSet ds = new DataSet(); XmlNode xmlNode1; XmlDataDocument xd = new XmlDataDocument(); StringBuilder sb; Hashtable ht = new Hashtable(); ht.Add(\"xmlIn\", \"<Request><MemCode>001</MemCode></Request>\"); xmlNode1 = Hishop.Plugins.WebServiceCaller.QuerySoapWebService(\"http://xxx.xxxx.com/Service.asmx\", \"SinPointQuery\", ht); if (xmlNode1 == null) { return; } string xmlstr= HttpUtility.HtmlDecode(xmlNode1.OuterXml); sb = new StringBuilder(xmlstr); if (sb.ToString().Equals(\"\")) { return; } xd.LoadXml(sb.ToString()); ds.ReadXml(new XmlNodeReader(xd)); //ds可以返回出结果集
以上所述就是本文的全部内容了,希望大家能够喜欢。
本文地址:https://www.stayed.cn/item/24409
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我