当前位置: 编程技术>.net/c#/asp.net
c#动态调用Webservice的两种方法实例
来源: 互联网 发布时间:2014-10-22
本文导语: 方法一: 代码如下:Hashtable ht = new Hashtable(); ht.Add("a", "testhelloworld"); XmlDocument xx = WebServicesHelper.QuerySoapWebService("http://www./elab_mgmt/WorkflowSchemeTaskSerivce.asmx", "ATesting", ht); string ss = xx....
方法一:
代码如下:
Hashtable ht = new Hashtable();
ht.Add("a", "testhelloworld");
XmlDocument xx = WebServicesHelper.QuerySoapWebService("http://www./elab_mgmt/WorkflowSchemeTaskSerivce.asmx", "ATesting", ht);
string ss = xx.OuterXml;
代码如下:
///
/// 通用WebService调用(Soap),参数Pars为String类型的参数名、参数值
///
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("" + RetXml + "");
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;
}
方法二:
通过SOAPUI直接取URL
代码如下:
string postData2="?";
HttpHelper.GetResponseFormUrlAsync("http://www.xxx.com/testingservices.asmx?wsdl", postData2, "text/xml", true, new AsyncCallback(responseCallback));
代码如下:
}
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() + "rnResponse状态代码为rn" + 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() + "rn" + ResponseStr);
}
catch (Exception e)
{
LogHelper.Fatal("定时任务", req.RequestUri.ToString() + "rn执行失败", e);
}
}