源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c#动态调用Webservice的两种方法实例

  • 时间:2020-02-24 06:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c#动态调用Webservice的两种方法实例
方法一:
[u]复制代码[/u] 代码如下:
Hashtable ht = new Hashtable();             ht.Add("a", "testhelloworld");             XmlDocument xx = WebServicesHelper.QuerySoapWebService("http://www.1sucai.cn/elab_mgmt/WorkflowSchemeTaskSerivce.asmx", "ATesting", ht);             string ss = xx.OuterXml;
[u]复制代码[/u] 代码如下:
/// <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));             }         }
[u]复制代码[/u] 代码如下:
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;         }
[u]复制代码[/u] 代码如下:
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;         }
方法二: 通过SOAPUI直接取URL
[u]复制代码[/u] 代码如下:
string postData2="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\"><soapenv:Header/><soapenv:Body><tem:ATesting><!--Optional:--><tem:a>?</tem:a></tem:ATesting></soapenv:Body></soapenv:Envelope>";             HttpHelper.GetResponseFormUrlAsync("http://www.xxx.com/testingservices.asmx?wsdl", postData2, "text/xml", true, new AsyncCallback(responseCallback));
[u]复制代码[/u] 代码如下:
}         static void responseCallback(IAsyncResult ar)         {             HttpWebRequest req = ar.AsyncState as HttpWebRequest;             if (req == null)                 return;             try             {                 HttpWebResponse response = req.EndGetResponse(ar) as HttpWebResponse;                 if (response.StatusCode != HttpStatusCode.OK)                 {                     response.Close();                     LogHelper.Error("定时任务", "异步执行失败," + req.RequestUri.ToString() + "\r\nResponse状态代码为\r\n" + response.StatusCode.ToString());                     return;                 }                 Stream responseStream = response.GetResponseStream();                 StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);                 string ResponseStr = reader.ReadToEnd();                 responseStream.Close();                 LogHelper.Warn("定时任务", req.RequestUri.ToString() + "\r\n" + ResponseStr);             }             catch (Exception e)             {                 LogHelper.Fatal("定时任务", req.RequestUri.ToString() + "\r\n执行失败", e);             }         }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部