惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
The GitHub Blog
The GitHub Blog
美团技术团队
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
Attack and Defense Labs
Attack and Defense Labs
G
Google Developers Blog
I
InfoQ
博客园 - 司徒正美
T
Troy Hunt's Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
S
Security Affairs
M
MIT News - Artificial intelligence
Simon Willison's Weblog
Simon Willison's Weblog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tailwind CSS Blog
量子位
Vercel News
Vercel News
月光博客
月光博客
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LangChain Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 最新话题
F
Full Disclosure
The Hacker News
The Hacker News
Hacker News: Ask HN
Hacker News: Ask HN
T
Tor Project blog
A
Arctic Wolf
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Forbes - Security
Forbes - Security
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Y
Y Combinator Blog
GbyAI
GbyAI
B
Blog RSS Feed
V
Visual Studio Blog
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs

博客园 - Rain@sz

C#多线程编程(转) webService动态编译(编译在内存中,不会有权限问题) 什么是AOP? (摘) 阿里巴巴信息抓取器 脏读、不可重复读和虚读。(数据库)摘 c#写Activex控件(.Net 2.0) SPS中模拟登陆 sql server 2005分页存储过程和sql server 2000分页存储过程(摘) net的辅助工具 ajax基本函数--js Memento Pattern(备忘录模式) Interpreter Pattern(解释器模式) State Pattern(状态模式) Mediator Pattern(中介者模式) 动态调用Webservice(摘) 分页--页脚控件 RSS 标准 DP-還未添加 DP-职责链模式(Chain of Responsibility)
调用webservice类(转)
Rain@sz · 2011-04-06 · via 博客园 - Rain@sz

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> 

 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)); 

         } 

     } 

     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(RetXml);

         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()); 

         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("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); 

     } 

     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); 

     } 

 }