zoukankan      html  css  js  c++  java
  • WebService

    手动写webservice,代码代码如下:
    using System;
    using System.Web;
    using System.Xml;
    using System.Collections;
    using System.Net;
    using System.Text;
    using System.IO;
    
    
    
    
    /// <summary>
    /// 利用WebRequest/WebResponse进行WebService调用的类
    /// </summary>
    namespace HuaSpace
    {
        public class WebSvcCaller
        {
            //<webServices>
            //  <protocols>
            //    <add name="HttpGet"/>
            //    <add name="HttpPost"/>
            //  </protocols>
            //</webServices>
    
    
            private static Hashtable _xmlNamespaces = new Hashtable();//缓存xmlNamespace,避免重复调用GetNamespace
    
    
            
            /// <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));
                }
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="URL"></param>
            /// <param name="MethodName"></param>
            /// <param name="Pars"></param>
            /// <param name="XmlNs"></param>
            /// <returns></returns>
            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;
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="URL"></param>
            /// <returns></returns>
            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());
                return doc.SelectSingleNode("//@targetNamespace").Value;
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="Pars"></param>
            /// <param name="XmlNs"></param>
            /// <param name="MethodName"></param>
            /// <returns></returns>
            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("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
                XmlElement soapMethod = doc.CreateElement(MethodName);
                soapMethod.SetAttribute("xmlns", XmlNs);
                foreach (string k in Pars.Keys)
                {
                    XmlElement soapPar = doc.CreateElement(k);
                    soapPar.InnerText = Pars[k].ToString();
                    soapMethod.AppendChild(soapPar);
                }
                soapBody.AppendChild(soapMethod);
                doc.DocumentElement.AppendChild(soapBody);
                return Encoding.UTF8.GetBytes(doc.OuterXml);
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="request"></param>
            private static void SetWebRequest(HttpWebRequest request)
            {
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Timeout = 10000;
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="request"></param>
            /// <param name="data"></param>
            private static void WriteRequestData(HttpWebRequest request, byte[] data)
            {
                request.ContentLength = data.Length;
                Stream writer = request.GetRequestStream();
                writer.Write(data, 0, data.Length);
                writer.Close();
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="Pars"></param>
            /// <returns></returns>
            private static byte[] EncodePars(Hashtable Pars)
            {
                return Encoding.UTF8.GetBytes(ParsToString(Pars));
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="Pars"></param>
            /// <returns></returns>
            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();
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="response"></param>
            /// <returns></returns>
            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;
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="doc"></param>
            private static void AddDelaration(XmlDocument doc)
            {
                XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
                doc.InsertBefore(decl, doc.DocumentElement);
            }
        }
    
    
    }


  • 相关阅读:
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    OA办公系统 Springboot Activiti6 工作流 集成代码生成器 vue.js 前后分离 跨域
    java企业官网源码 自适应响应式 freemarker 静态引擎 SSM 框架
    java OA办公系统源码 Springboot Activiti工作流 vue.js 前后分离 集成代码生成器
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 视频播放 弹幕技术 视频弹幕 视频截图 springmvc mybatis SSM
    最后阶段总结
    第二阶段学习总结
    第一阶段学习总结
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3047899.html
Copyright © 2011-2022 走看看