c# webservice接口引用、HTTPPost调用以及XML解析(soap和非soap)

您所在的位置:网站首页 c调用webservice接口 c# webservice接口引用、HTTPPost调用以及XML解析(soap和非soap)

c# webservice接口引用、HTTPPost调用以及XML解析(soap和非soap)

2024-07-08 00:08| 来源: 网络整理| 查看: 265

1.webservice接口获取wsdl文件,浏览器访问接口地址后加?wsdl将得到接口wsdl文件;

  将wsdl文件放入本地iis某个网站下,程序中找到引用=》选择服务引用;

  将网站的wsdl文件地址填入到服务引用地址栏,获取到将wsdl文件应用到程序,然后程序中调用即可2.使用httppost调webservice接口,需要将SOAPAction获取到(可看wsdl文件中SOAPAction节点的值)

//调用 string str = WebHelper.LoadXmls("123456"); Hashtable header = new Hashtable(); header.Add("SOAPAction", "http://tempuri.org/***"); var res = WebHelper.Http("http:/***", str,header); /// /// 调用soap协议接口 webservice wsdl /// /// /// /// /// public static string Http(string url, string data = null, Hashtable header = null) { string method = "post"; string contenttype = "text/xml;charset=utf-8"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = string.IsNullOrEmpty(method) ? "post" : method; request.ContentType = string.IsNullOrEmpty(contenttype) ? "text/xml;charset=utf-8" : contenttype; if (header != null) { foreach (var i in header.Keys) { request.Headers.Add(i.ToString(), header[i].ToString()); } } if (!string.IsNullOrEmpty(data)) { Stream RequestStream = request.GetRequestStream(); byte[] bytes = Encoding.UTF8.GetBytes(data); RequestStream.Write(bytes, 0, bytes.Length); RequestStream.Close(); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream ResponseStream = response.GetResponseStream(); StreamReader StreamReader = new StreamReader(ResponseStream, Encoding.GetEncoding("UTF-8")); string re = StreamReader.ReadToEnd(); StreamReader.Close(); ResponseStream.Close(); return re; }

 3.xml数据转化为对象;对象转为XML;request对象只生成一个SelfItemList节点

public class request { public SelfItemList SelfItemList{get;set;} } /// 只生成一个 SelfItemList节点 [XmlRoot("DocumentElement")] public class SelfItemList { [XmlElement("SelfItem")] public List SelfItem { get; set; } } /// /// 把对象转换成xml /// /// /// public static string serialize(object o) { var xml = ""; if (o == null) { return xml; } return serialize(o, o.GetType()); } /// /// 把对象转换成xml /// /// /// 指定对象类型 /// public static string serialize(object o, Type type) { var xml = ""; if (o == null) { return xml; } //序列化对象 XmlSerializer serializer = new XmlSerializer(type); // 输出 Stream stream = new MemoryStream(); serializer.Serialize(stream, o); stream.Position = 0; StreamReader sr = new StreamReader(stream); xml = sr.ReadToEnd(); sr.Dispose(); sr.Close(); stream.Dispose(); stream.Close(); return xml; } /// /// 反序化xml为对象 /// /// /// /// public static object deserialize(string xml, Type type) { try { using (StringReader sr = new StringReader(xml)) { XmlSerializer serializer = new XmlSerializer(type); return serializer.Deserialize(sr); } } catch (Exception e) { return null; } }

4.获取到返回xml值,如果是soap接口 获取节点值如下;建议将命名空间去除!!;非soap接口参考第三点获取节点值  

XmlDocument docnew = new XmlDocument(); docnew.LoadXml(res.Replace(" xmlns=\"http://tempuri.org/\"","")); XmlNode HIPMessageServerResult = docnew.DocumentElement["soap:Body"]["RequestSubmitNewResponse"]["RequestSubmitNewResult"];

5.如果需要组装新的xml;可以将XmlNode的OuterXml重新加载为一个新xml文件;一定不要是InnerXml,因为这个会带命名空间,导致xml读取不出来!

XmlDocument doc = new XmlDocument(); doc.LoadXml(HIPMessageServerResult.OuterXml); XmlElement root = doc.DocumentElement; XmlNode ResultCode = root.SelectSingleNode("Response/ResultCode"); string xmlcode = ResultCode.InnerText; var rootNode = root.SelectNodes("//PeItem"); foreach (XmlNode xxNode in rootNode) { var zhxmbh = xxNode.SelectSingleNode("ItemId").InnerText; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3