C#調用WebService(Soap)接口方法

首先了解兩點知識:

1.什麼是WebService

2.什麼是soap

WebService:是一個SOA(面向服務的編程)的架構,它是不依賴於語言,不依賴於平臺,可以實現不同的語言間的相互調用,通過Internet進行基於Http協議的網絡應用間的交互。

WebService實現不同語言間的調用,是依託於一個標準,webservice是需要遵守WSDL(web服務定義語言)/SOAP(簡單請求協議)規範的。 WebService=WSDL+SOAP+UDDI(webservice的註冊)。

WebServices 提供一個建立分佈式應用的平臺。

Soap :是基於 XML 的簡易協議,可使應用程序在 HTTP 之上進行信息交換。或者更簡單地說:SOAP 是用於訪問網絡服務的協議,基於 XML。SOAP 是一種用於發送消息的格式。

Soap協議的Post方法

        /// <summary>
        /// Soap協議Post方法
        /// </summary>
        /// <param name="uri">WebService地址</param>
        /// <param name="str">傳入Soap協議格式數據</param>
        /// <returns></returns>
        public static string SendToReturn(Uri _uri, StringBuilder _str)
        {
            string _returnstr = "";
            //發起請求
            WebRequest webRequest = WebRequest.Create(_uri);
            webRequest.ContentType = "text/xml; charset=utf-8";
            webRequest.Method = "POST";
            using (Stream requestStream = webRequest.GetRequestStream())
            {
                byte[] paramBytes = Encoding.UTF8.GetBytes(_str.ToString());
                requestStream.Write(paramBytes, 0, paramBytes.Length);
            }
            //響應
            try
            {
                WebResponse webResponse = webRequest.GetResponse();
                using (StreamReader myStreamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
                {
                    _returnstr = myStreamReader.ReadToEnd();
                }
            }
            catch (WebException ex)
            {
                _returnstr = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
            }
            return _returnstr;
        }

Soap協議的Xml格式組裝(根據每個人情況自行組裝)

  StringBuilder soap = new StringBuilder();
  soap.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
  soap.Append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"  xmlns:soap=\"http://www.shaphar.com/SoapService\" >");
  soap.Append("<soapenv:Header/>");
  soap.Append("<soapenv:Body>");
  soap.Append("<soap:REQUEST_DATA>");
  soap.Append("<soap:commonHeader>");
  soap.AppendFormat("<soap:BIZTRANSACTIONID>InsertOUTPT_CARRIER_TRACKING_PS_{0}</soap:BIZTRANSACTIONID><soap:COUNT>{1}</soap:COUNT><soap:CONSUMER>{2}</soap:CONSUMER>", DateTime.Now.ToString("yyyyMMddHHmmss"), 1, "SYGD");
  soap.AppendFormat("<soap:SRVLEVEL>1</soap:SRVLEVEL><soap:ACCOUNT></soap:ACCOUNT> <soap:PASSWORD></soap:PASSWORD><soap:COMMENTS></soap:COMMENTS>");
  soap.Append("</soap:commonHeader>");
  soap.Append("<soap:LIST><![CDATA[<DATA>");
  soap.Append("<ITEM>");
  soap.AppendFormat("<BL_LOAD_NO>{0}</BL_LOAD_NO>", soapBill.BL_LOAD_NO == null ? "" : soapBill.BL_LOAD_NO);
  soap.AppendFormat("<BL_ORDER_NO>{0}</BL_ORDER_NO>", soapBill.BL_ORDER_NO == null ? "" : soapBill.BL_ORDER_NO);
  soap.AppendFormat("<CUSTOMER_ORDER_NO>{0}</CUSTOMER_ORDER_NO>", soapBill.CUSTOMER_ORDER_NO == null ? "" : soapBill.CUSTOMER_ORDER_NO);
  soap.AppendFormat("<STATUS>{0}</STATUS>", soapBill.STATUS == null ? "" : soapBill.STATUS);
  soap.AppendFormat("<TRACKING_TIME>{0}</TRACKING_TIME>", soapBill.TRACKING_TIME == null ? "" : soapBill.TRACKING_TIME);
  soap.AppendFormat("<STATUS_TIME>{0}</STATUS_TIME>", soapBill.STATUS_TIME == null ? "" : soapBill.STATUS_TIME);
  soap.AppendFormat("<POSITION>{0}</POSITION>", soapBill.POSITION == null ? "" : soapBill.POSITION);
  soap.AppendFormat("<VEHICLE_ID>{0}</VEHICLE_ID>", soapBill.VEHICLE_ID == null ? "" : soapBill.VEHICLE_ID);
  soap.AppendFormat("<DRIVER_NAME>{0}</DRIVER_NAME>", soapBill.DRIVER_NAME == null ? "" : soapBill.DRIVER_NAME);
  soap.AppendFormat("<SIGNER>{0}</SIGNER>", soapBill.SIGNER == null ? "" : soapBill.SIGNER);
  soap.AppendFormat("<VEHICLE_TYPE>{0}</VEHICLE_TYPE>", soapBill.VEHICLE_TYPE == null ? "" : soapBill.VEHICLE_TYPE);
  soap.AppendFormat("<NODE_DESCRIPTION>{0}</NODE_DESCRIPTION>", soapBill.NODE_DESCRIPTION == null ? "" : soapBill.NODE_DESCRIPTION);
  soap.AppendFormat("<NOTES>{0}</NOTES>", soapBill.NOTES == null ? "" : soapBill.NOTES);
  soap.AppendFormat("<QTY_EACH>{0}</QTY_EACH>", soapBill.QTY_EACH == null ? "" : soapBill.QTY_EACH);
  soap.AppendFormat("<GROSSWEIGHT>{0}</GROSSWEIGHT>", soapBill.GROSSWEIGHT == null ? "" : soapBill.GROSSWEIGHT);
  soap.AppendFormat("<CUBIC>{0}</CUBIC>", soapBill.CUBIC == null ? "" : soapBill.CUBIC);
  soap.AppendFormat("<UDF01>{0}</UDF01>", soapBill.UDF01 == null ? "" : soapBill.UDF01);
  soap.AppendFormat("<UDF02>{0}</UDF02>", soapBill.UDF02 == null ? "" : soapBill.UDF02);
  soap.AppendFormat("<UDF03>{0}</UDF03>", soapBill.UDF03 == null ? "" : soapBill.UDF03);
  soap.AppendFormat("<UDF04>{0}</UDF04>", soapBill.UDF04 == null ? "" : soapBill.UDF04);
  soap.AppendFormat("<UDF05>{0}</UDF05>", soapBill.UDF05 == null ? "" : soapBill.UDF05);
  soap.Append("</ITEM>");
  soap.Append("</DATA>]]></soap:LIST>");
  soap.Append("</soap:REQUEST_DATA>");
  soap.Append("</soapenv:Body>");
  soap.Append("</soapenv:Envelope>");

Soap協議的Post方法調用

 //插入請求數據的日誌
 AddInterfaceLog("SendNodeReturnData", "請求數據:" + soap.ToString(), 1);
 //調用webService接口(soap)
 Uri uri = new Uri(reqUrl);
 string soapResult = SendToReturn(uri, soap);
 //插入響應結果的日誌
 AddInterfaceLog("SendNodeReturnData", "響應結果:" + soapResult, 1);

調用後結果

 

PS:

具體參考以下兩篇博客:

https://www.jb51.net/article/130404.htm   

https://blog.csdn.net/sinat_29009169/article/details/103917166  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章