.Net下采用GET/POST/SOAP方式動態呼叫WebService的簡易靈活方法(C#)
一直以來,我都為動態呼叫WebService方法而煩惱。在.Net環境 下,最常用的方法就是採用代理類來呼叫WebService,可以通過改變代理類的Url屬性來實現動態呼叫,但當xmlns改變時就會出錯,似乎要重新 繫結Webservice並重新編譯後才能再次執行。我還試過網上的一種動態編譯並動態呼叫WebService的方式,這種方法效率低,而且需要有較高 的許可權,否則編譯失敗。我曾在Sql Server 2005的CLR儲存過程中用此方法呼叫WebService時,浪費了大半天時間,無論怎麼試它就是不能成功編譯。於是我便不斷思考其他的方法,今天晚 上終於寫了一個類用於動態呼叫WebService,只需傳入WebService地址、需呼叫的方法及其引數,就可以隨時動態呼叫了。現分享給大家,代 碼如下:
using System;
using System.Web;
using System.Xml;
using System.Collections;
using System.Net;
using System.Text;
using System.IO;
/**////
/// 利用WebRequest/WebResponse進行WebService呼叫的類,By 同濟黃正
///
public class WebSvcCaller
...{
//
//
//
//
//
//
private static Hashtable _xmlNamespaces = new Hashtable();//快取xmlNamespace,避免重複呼叫GetNamespace
/**////
/// 需要WebService支援Post呼叫
///
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());
}
/**////
/// 需要WebService支援Get呼叫
///
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());
}
/**////
/// 通用WebService呼叫(Soap),引數Pars為String型別的引數名、引數值
///
public static XmlDocument QuerySoapWebService(String URL , String MethodName , Hashtable Pars)
...{
//By 同濟黃正 http://hz932.ys168.com 2008-3-19
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("
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());
return doc.SelectSingleNode("//@targetNamespace").Value;
}
private static byte[] EncodeParsToSoap(Hashtable Pars , String XmlNs , String MethodName)
...{
XmlDocument doc = new XmlDocument();
doc.LoadXml("
相關文章
- Webservice呼叫方式:axis,soap詳解Web
- C#動態呼叫webserviceC#Web
- PHP使用SOAP呼叫.net的WebService資料PHPWeb
- JAVA -get-post-soap方式反問外部webservicesJavaWeb
- 關於iOS-WebService SOAP AFNetworking~> 2.6.3 XML傳參呼叫方法iOSWebXML
- java動態呼叫webserviceJavaWeb
- Http get,post,soap協議的區別HTTP協議
- C#呼叫webserviceC#Web
- get方式傳參的以post方法傳的解決方法
- 使用C#建立webservice及三種呼叫方式 (轉)C#Web
- 一種WebService的呼叫方式Web
- PHP 以 SOAP 方式呼叫介面PHP
- Android程式使用SOAP呼叫遠端WebService服務AndroidWeb
- js 呼叫 WebService 方法JSWeb
- curl 簡單post get
- C#中WebService的建立、部署和呼叫的簡單例項C#Web單例
- 誰說.net core不好動態訪問webservice?看這篇文章,C#快速實現動態訪問webservice,相容.net framework和.net core+WebC#Framework
- PHP呼叫webservice遇到 Soap WSDL Error - "failed to load external entityPHPWebErrorAI
- post方式get方式提交表單的主要區別
- SOAP和WebService真是垃圾。Web
- Restful是什麼,SOAP Webservice和RESTful WebserviceRESTWeb
- php呼叫webservice的幾種方法PHPWeb
- 靈活定義和處理SOAP頭訊息 (轉)
- jQuery – AJAX get() 和 post() 方法jQuery
- HTTP方法_GET 對比 POSTHTTP
- C#動態呼叫WCF介面C#
- php如何利用soap呼叫.Net的WebServiceasmx檔案PHPWebASM
- WebService Soap架構設計Web架構
- ruby 訪問新浪微博API post方式和get方式API
- 筆記:Curl 簡單 post + get筆記
- restfulwebservice 呼叫方法 getRESTWeb
- C#使用sqlite-net搭建簡易的ORMC#SQLiteORM
- 開發:隨筆記錄之 CXF 動態呼叫Webservice筆記Web
- 小程式生態是更靈活構建超級App的方式APP
- Python探析get和post方法Python
- jQuery Ajax get post 方法詳解jQuery
- C++呼叫C#的動態庫dllC++C#
- (文摘)徹底理解webservice SOAP WSDLWeb