zoukankan      html  css  js  c++  java
  • c#动态调用Webservices

    方式一:

    Hashtable ht = new Hashtable();
                ht.Add("a", "testhelloworld");
                XmlDocument xx = WebServicesHelper.QuerySoapWebService("http://e-learning.huawei.com/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><!--Optional:--><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() + "
    Response状态代码为
    " + 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() + "
    " + ResponseStr);
                }
                catch (Exception e)
                {
                    LogHelper.Fatal("定时任务", req.RequestUri.ToString() + "
    执行失败", e);
                }
            }
    View Code
  • 相关阅读:
    Hufman编码实现运用1 (原理不描述)
    E
    1178: [Apio2009]CONVENTION会议中心
    1071: [SCOI2007]组队
    #333. 【NOIP2017】宝藏
    CF 96 D. Volleyball
    CF 987 D. Fair
    qbxt的题:运
    qbxt的题:找一个三元环
    4361: isn
  • 原文地址:https://www.cnblogs.com/8090sns/p/3282562.html
Copyright © 2011-2022 走看看