WebService SOAP1.1 SOAP1.12 HTTP PSOT方式調用
Visual Studio 2022 新建WebService項目
創建之後,啓動運行
設置默認文檔即可
經過上面的創建WebService已經創建完成,添加HelloWorld3方法,
[WebMethod]
public string HelloWorld3(int a, string b)
{
//var s = a + b;
return $"Hello World a+b={a + b}";
}
屬性頁面如下:
地址加上?wsdl---http://localhost:8012/WebService1.asmx?wsdl, 可以查看具體方法,我們點開一個方法,查看具體調用方式
http://localhost:8012/WebService1.asmx?op=HelloWorld3
下面使用 SOAP1.1 SOAP1.12 HTTP PSOT方式調用WebService,代碼如下
#region 測試 SOAP1.1 SOAP1.12 HTTP PSOT方式調用WebService 調用 /// <summary> /// WebService SOAP1.1方法調用 /// </summary> /// <param name="xmldata">調用方法所需參數</param> public static string WebServiceSOAP11(int a, string b) { //http://localhost:8012/WebService1.asmx/HelloWorld3 #region HTTP POST 請求和響應示例 #region HTTP POST 請求和響應示例。所顯示的佔位符需替換爲實際值 //SOAP 1.1 //以下是 SOAP 1.2 請求和響應示例。所顯示的佔位符需替換爲實際值。 //請求 //POST /WebService1.asmx HTTP/1.1 //Host: localhost //Content-Type: text/xml; charset=utf-8 //Content-Length: length替換 //SOAPAction: "http://tempuri.org/HelloWorld3" //<?xml version="1.0" encoding="utf-8"?> //<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:Body> // <HelloWorld3 xmlns="http://tempuri.org/"> // <a>int替換</a> // <b>string替換</b> // </HelloWorld3> // </soap:Body> //</soap:Envelope> //響應 //HTTP/1.1 200 OK //Content-Type: text/xml; charset=utf-8 //Content-Length: length //<?xml version="1.0" encoding="utf-8"?> //<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:Body> // <HelloWorld3Response xmlns="http://tempuri.org/"> // <HelloWorld3Result>string</HelloWorld3Result> // </HelloWorld3Response> // </soap:Body> //</soap:Envelope> #endregion HttpWebRequest httpWebRequest = null; string result = null; var webserviceurl = "http://localhost:8012/WebService1.asmx" ?? ConfigurationManager.AppSettings.Get("WebServiceUrl"); httpWebRequest = (HttpWebRequest)WebRequest.Create(webserviceurl); //注意SOAP1.1 ContentType,需要SOAPAction,Content-Type: text/xml; charset=utf-8 httpWebRequest.ContentType = "text/xml; charset=utf-8"; httpWebRequest.Method = "post"; httpWebRequest.Headers.Add("SOAPAction", "http://tempuri.org/HelloWorld3"); Stream requestStream = httpWebRequest.GetRequestStream(); StreamWriter streamWriter = new StreamWriter(requestStream); streamWriter.Write($"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<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/\">\r\n<soap:Body>\r\n<HelloWorld3 xmlns=\"http://tempuri.org/\">\r\n<a>{a}</a>\r\n<b>{b}</b>\r\n</HelloWorld3>\r\n</soap:Body>\r\n</soap:Envelope>"); streamWriter.Close(); requestStream.Close(); //byte[] vs = Encoding.UTF8.GetBytes("a=66&b=1233"); //requestStream.Write(vs, 0, vs.Length); ////httpWebRequest.ContentLength = vs.Length; //requestStream.Close(); Stream responseStream = null; StreamReader reader = null; HttpWebResponse webResponse = (HttpWebResponse)httpWebRequest.GetResponse(); try { if (webResponse.StatusCode == HttpStatusCode.OK) { //返回值類型 Content-Type: text/xml; charset=utf-8 //StreamReader reader = new StreamReader(webResponse.GetResponseStream()); responseStream = webResponse.GetResponseStream(); reader = new StreamReader(responseStream); result = reader.ReadToEnd(); XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(result); result = xmlDocument.InnerText; } } catch (Exception ex) { result = $"查詢出錯,原因:{ex}"; } finally { reader.Close(); webResponse.Close(); responseStream.Close(); httpWebRequest.Abort(); } return result; //if (!string.IsNullOrEmpty(result)) //{ // System.Xml.Serialization.XmlSerializer xmlSerializer= new System.Xml.Serialization.XmlSerializer() //} #endregion } /// <summary> /// WebService SOAP1.2方法調用 /// </summary> /// <param name="xmldata">調用方法所需參數</param> public static string WebServiceSOAP12(int a, string b) { //http://localhost:8012/WebService1.asmx/HelloWorld3 #region HTTP POST 請求和響應示例 #region HTTP POST 請求和響應示例。所顯示的佔位符需替換爲實際值 //SOAP 1.2 //以下是 SOAP 1.2 請求和響應示例。所顯示的佔位符需替換爲實際值。 //POST /WebService1.asmx HTTP/1.1 //Host: localhost //Content-Type: application/soap+xml; charset=utf-8 //Content-Length: length //<?xml version="1.0" encoding="utf-8"?> //<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> // <soap12:Body> // <HelloWorld3 xmlns="http://tempuri.org/"> // <a>int</a> // <b>string</b> // </HelloWorld3> // </soap12:Body> //</soap12:Envelope> //HTTP/1.1 200 OK //Content-Type: application/soap+xml; charset=utf-8 //Content-Length: length //<?xml version="1.0" encoding="utf-8"?> //<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> // <soap12:Body> // <HelloWorld3Response xmlns="http://tempuri.org/"> // <HelloWorld3Result>string</HelloWorld3Result> // </HelloWorld3Response> // </soap12:Body> //</soap12:Envelope> #endregion HttpWebRequest httpWebRequest = null; string result = null; var webserviceurl = "http://localhost:8012/WebService1.asmx" ?? ConfigurationManager.AppSettings.Get("WebServiceUrl"); httpWebRequest = (HttpWebRequest)WebRequest.Create(webserviceurl); //注意與SOAP1.1 區分 ContentType,不需要SOAPAction,Content-Type: application/soap+xml; charset=utf-8 httpWebRequest.ContentType = "application/soap+xml; charset=utf-8"; httpWebRequest.Method = "post"; //不需要了 httpWebRequest.Headers.Add("SOAPAction", "http://tempuri.org/HelloWorld3"); Stream requestStream = httpWebRequest.GetRequestStream(); StreamWriter streamWriter = new StreamWriter(requestStream); streamWriter.Write($"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\r\n<soap12:Body>\r\n<HelloWorld3 xmlns=\"http://tempuri.org/\">\r\n<a>{a}</a>\r\n<b>{b}</b>\r\n</HelloWorld3>\r\n</soap12:Body>\r\n</soap12:Envelope>"); streamWriter.Close(); requestStream.Close(); //byte[] vs = Encoding.UTF8.GetBytes("a=66&b=1233"); //requestStream.Write(vs, 0, vs.Length); ////httpWebRequest.ContentLength = vs.Length; //requestStream.Close(); Stream responseStream = null; StreamReader reader = null; HttpWebResponse webResponse = (HttpWebResponse)httpWebRequest.GetResponse(); try { if (webResponse.StatusCode == HttpStatusCode.OK) { //返回值類型 Content-Type: application/soap+xml; charset=utf-8 //StreamReader reader = new StreamReader(webResponse.GetResponseStream()); responseStream = webResponse.GetResponseStream(); reader = new StreamReader(responseStream); result = reader.ReadToEnd(); XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(result); result = xmlDocument.InnerText; } } catch (Exception ex) { result = $"查詢出錯,原因:{ex}"; } finally { reader.Close(); webResponse.Close(); responseStream.Close(); httpWebRequest.Abort(); } return result; //if (!string.IsNullOrEmpty(result)) //{ // System.Xml.Serialization.XmlSerializer xmlSerializer= new System.Xml.Serialization.XmlSerializer() //} #endregion } /// <summary> /// WebService HTTP方法調用 /// </summary> /// <param name="xmldata">調用方法所需參數</param> public static string WebServiceHTTP(string xmldata) { //http://localhost:8012/WebService1.asmx/HelloWorld3 #region HTTP POST 請求和響應示例 #region HTTP POST 請求和響應示例。所顯示的佔位符需替換爲實際值 //以下是 HTTP POST 請求和響應示例。所顯示的佔位符需替換爲實際值。 // POST /WebService1.asmx/HelloWorld3 HTTP/1.1 // Host: localhost // Content-Type: application/x-www-form-urlencoded // Content-Length: length替換 // a=string替換&b=string替換 // HTTP/1.1 200 OK // Content-Type: text/xml; charset=utf-8 // Content-Length: length // <?xml version="1.0" encoding="utf-8"?> // <string xmlns="http://tempuri.org/">string</string> #endregion HttpWebRequest httpWebRequest = null; string result = null; var webserviceurl = "http://localhost:8012/WebService1.asmx/HelloWorld3" ?? ConfigurationManager.AppSettings.Get("WebServiceUrl"); httpWebRequest = (HttpWebRequest)WebRequest.Create(webserviceurl); //注意與SOAP1.1,SOAP1.2 區分 ContentType,不需要SOAPAction,Content-Type: application/x-www-form-urlencoded httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.Method = "post"; Stream requestStream = httpWebRequest.GetRequestStream(); StreamWriter streamWriter = new StreamWriter(requestStream); streamWriter.Write(xmldata); streamWriter.Close(); requestStream.Close(); //byte[] vs = Encoding.UTF8.GetBytes("a=66&b=1233"); //requestStream.Write(vs, 0, vs.Length); ////httpWebRequest.ContentLength = vs.Length; //requestStream.Close(); Stream responseStream = null; StreamReader reader = null; HttpWebResponse webResponse = (HttpWebResponse)httpWebRequest.GetResponse(); try { if (webResponse.StatusCode == HttpStatusCode.OK) { //返回值類型 Content-Type: text/xml; charset=utf-8 //StreamReader reader = new StreamReader(webResponse.GetResponseStream()); responseStream = webResponse.GetResponseStream(); reader = new StreamReader(responseStream); result = reader.ReadToEnd(); XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(result); result = xmlDocument.InnerText; } } catch (Exception ex) { result = $"查詢出錯,原因:{ex}"; } finally { reader.Close(); webResponse.Close(); responseStream.Close(); httpWebRequest.Abort(); } return result; //if (!string.IsNullOrEmpty(result)) //{ // System.Xml.Serialization.XmlSerializer xmlSerializer= new System.Xml.Serialization.XmlSerializer() //} #endregion } #endregion
使用代碼
string aa = WebServiceSOAP11(4, "888"); Console.WriteLine($"WebService--SOAP1.1-- 返回值:{aa}"); aa = WebServiceSOAP11(6, "0000"); Console.WriteLine($"WebService--SOAP1.2-- 返回值:{aa}"); aa = WebServiceHTTP("a=666666&b=8888");//注意參數名稱不一致會報錯,a,b Console.WriteLine($"WebService--http-- 返回值:{aa}");
運行效果: