程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#獲得途徑的幾種方法實例剖析

C#獲得途徑的幾種方法實例剖析

編輯:C#入門知識

C#獲得途徑的幾種方法實例剖析。本站提示廣大學習愛好者:(C#獲得途徑的幾種方法實例剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#獲得途徑的幾種方法實例剖析正文


這裡給年夜家帶來的是靜態webservice挪用接口並讀取解析前往成果的詳細示例,異常的簡略,正文也很具體,小同伴們可以參考下。

using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace Hishop.Plugins
{
  /// <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
  }
}

//挪用並讀取解析前往成果
 
 DataSet ds = new DataSet(); 
    XmlNode xmlNode1;
    XmlDataDocument xd = new XmlDataDocument();
    StringBuilder sb; 
    Hashtable ht = new Hashtable();
    ht.Add("xmlIn", "<Request><MemCode>001</MemCode></Request>");
    xmlNode1 = Hishop.Plugins.WebServiceCaller.QuerySoapWebService("http://xxx.xxxx.com/Service.asmx", "SinPointQuery", ht);
    if (xmlNode1 == null)
    {
      return;
    }
    string xmlstr= HttpUtility.HtmlDecode(xmlNode1.OuterXml);
    sb = new StringBuilder(xmlstr);
    if (sb.ToString().Equals(""))
    {
      return;
    }
    xd.LoadXml(sb.ToString());
    ds.ReadXml(new XmlNodeReader(xd)); 
    //ds可以前往出成果集

以上所述就是本文的全體內容了,願望年夜家可以或許愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved