手机
当前位置:查字典教程网 >编程开发 >C#教程 >c#动态调用Webservice的两种方法实例
c#动态调用Webservice的两种方法实例
摘要:方法一:复制代码代码如下:Hashtableht=newHashtable();ht.Add("a","testhelloworld");X...

方法一:

复制代码 代码如下:

Hashtable ht = new Hashtable();

ht.Add("a", "testhelloworld");

XmlDocument xx = WebServicesHelper.QuerySoapWebService("http://www.jb51.net/elab_mgmt/WorkflowSchemeTaskSerivce.asmx", "ATesting", ht);

string ss = xx.OuterXml;

复制代码 代码如下:

/// <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;

}

方法二:

通过SOAPUI直接取URL

复制代码 代码如下:

string postData2="<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"><soapenv:Header/><soapenv:Body><tem:ATesting><><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));

复制代码 代码如下:

}

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);

}

}

【c#动态调用Webservice的两种方法实例】相关文章:

解析Silverlight调用WCF/Rest异常的解决方法

C#中using的三种用法

使用checked语句防止数据溢出的解决方法

c#创建Graphics对象的三种方法

c#中SAPI使用总结——SpVoice的使用方法

用C#实现启动另一程序的方法实例

winform调用javascript的小例子

C# 将字节流转换为图片的实例方法

重写、隐藏基类(new, override)的方法

C#调用和实现WebService,纯手工打造!

精品推荐
分类导航