zoukankan      html  css  js  c++  java
  • .net中调用webservice,post、get方式实现调用

      1. 右键你的网站-〉添加服务引用-〉然后输入webservice的地址。

      2. 之后,你就可以用对象来操作你的webservice了

      3. 方法三:利用http 协议的get和post
        这是最为灵活的方法。


        View Code 
        using System;
        using System.Collections;
        using System.IO;
        using System.Net;
        using System.Text;
        using System.Xml;
        using System.Xml.Serialization;
        namespace Bingosoft.RIA.Common
        {
            /// <summary>
            ///  利用WebRequest/WebResponse进行WebService调用的类
            /// </summary>
            public class WebServiceCaller
            {
                #region Tip:使用说明
                //webServices 应该支持Get和Post调用,在web.config应该增加以下代码
                //<webServices>
                //  <protocols>
                //    <add name="HttpGet"/>
                //    <add name="HttpPost"/>
                //  </protocols>
                //</webServices>
                //调用示例:
                //Hashtable ht = new Hashtable();  //Hashtable 为webservice所需要的参数集
                //ht.Add("str", "test");
                //ht.Add("b", "true");
                //XmlDocument xx = WebSvcCaller.QuerySoapWebService("http://localhost:81/service.asmx", "HelloWorld", ht);
                //MessageBox.Show(xx.OuterXml);
                #endregion
                /// <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));
                    }
                }
                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;
                }
                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_x_x("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
                    XmlElement soapBody = doc.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
                    //XmlElement soapMethod = doc.createElement_x_x(MethodName);
                    XmlElement soapMethod = doc.CreateElement(MethodName);
                    soapMethod.SetAttribute("xmlns", XmlNs);
                    foreach (string k in Pars.Keys)
                    {
                        //XmlElement soapPar = doc.createElement_x_x(k);
                        XmlElement soapPar = doc.CreateElement(k);
                        soapPar.InnerXml = ObjectToSoapXml(Pars[k]);
                        soapMethod.AppendChild(soapPar);
                    }
                    soapBody.AppendChild(soapMethod);
                    doc.DocumentElement.AppendChild(soapBody);
                    return Encoding.UTF8.GetBytes(doc.OuterXml);
                }
                private static string ObjectToSoapXml(object o)
                {
                    XmlSerializer mySerializer = new XmlSerializer(o.GetType());
                    MemoryStream ms = new MemoryStream();
                    mySerializer.Serialize(ms, o);
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(Encoding.UTF8.GetString(ms.ToArray()));
                    if (doc.DocumentElement != null)
                    {
                        return doc.DocumentElement.InnerXml;
                    }
                    else
                    {
                        return o.ToString();
                    }
                }
                /// <summary>
                /// 设置凭证与超时时间
                /// </summary>
                /// <param name="request"></param>
                private static void SetWebRequest(HttpWebRequest request)
                {
                    request.Credentials = CredentialCache.DefaultCredentials;
                    request.Timeout = 10000;
                }
                private static void WriteRequestData(HttpWebRequest request, byte[] data)
                {
                    request.ContentLength = data.Length;
                    Stream writer = request.GetRequestStream();
                    writer.Write(data, 0, data.Length);
                    writer.Close();
                }
                private static byte[] EncodePars(Hashtable Pars)
                {
                    return Encoding.UTF8.GetBytes(ParsToString(Pars));
                }
                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();
                }
                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;
                }
                private static void AddDelaration(XmlDocument doc)
                {
                    XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
                    doc.InsertBefore(decl, doc.DocumentElement);
                }
                private static Hashtable _xmlNamespaces = new Hashtable();//缓存xmlNamespace,避免重复调用GetNamespace
            }
        }
  • 相关阅读:
    flask 文件上传(单文件上传、多文件上传)--
    flask 自定义验证器(行内验证器、全局验证器) --
    flask 使用宏渲染表单(包含错误信息) --
    flask 在模板中渲染错误消息 --
    flask 在视图函数中验证表单 --
    flask 处理表单数据 --
    flask 在模板中渲染表单 --
    flask 使用Flask-WTF处理表单 --
    flask 表单
    iPad适合写作吗
  • 原文地址:https://www.cnblogs.com/hui1107464497/p/4502098.html
Copyright © 2011-2022 走看看