| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 | using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Text;using System.Web;namespace WMS.Util{    public static class WebServiceCall    {        public static string getsoapresource(string url, string datastr)        {            try            {                //Encoding encoding = Encoding.GetEncoding("utf-8");                Encoding encoding = Encoding.GetEncoding("GB2312");                byte[] data = encoding.GetBytes(datastr);                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);                //发送数据                request.Method = "POST";                request.ContentType = "Content-Type:text/xml;charset=utf-8";                request.ContentLength = data.Length;                Stream requestStream = request.GetRequestStream();                requestStream.Write(data, 0, data.Length);                requestStream.Close();                //接收返回值                HttpWebResponse res = (HttpWebResponse)request.GetResponse();                StreamReader sReader = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);                string strBack = sReader.ReadToEnd();                //Response.Write(strBack);                sReader.Close();                res.Close();                return strBack;            }            catch (Exception ex)            {                throw ex;            }        }        //public static string mUrl = "http://localhost:53342/WebService.asmx";        /// <summary>        /// 调用接口        /// </summary>        /// <param name="methodName">方法名称</param>        /// <param name="param">参数名称</param>        /// <returns>返回值</returns>        public static string callWebService(string mUrl, string methodName, string param)        {            //Encoding encoding = Encoding.GetEncoding("utf-8");            Encoding encoding = Encoding.GetEncoding("utf-8");            //获取请求数据            byte[] data = getRequestDataALL(methodName, param); // getRequestData(methodName, param);            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(mUrl);            request.Method = "POST";            request.ContentType = "Content-Type:text/xml;charset=utf-8";            string mSoapAction = "http://tempuri.org/" + methodName;            request.Headers.Add("SOAPAction", mSoapAction);            request.ContentLength = data.Length;            Stream rStream = request.GetRequestStream();            rStream.Write(data, 0, data.Length);            rStream.Close();            WebResponse response = request.GetResponse();            Stream dataStream = response.GetResponseStream();            StreamReader reader = new StreamReader(dataStream);            string result = reader.ReadToEnd();            dataStream.Close();            response.Close();            return result;        }        /// <summary>        /// 获取请求内容(方法1) 适合 .Net        /// </summary>        /// <param name="methodName">方法名称</param>        /// <param name="param">参数</param>        /// <returns></returns>        public static byte[] getRequestData(string methodName, Dictionary<string, string> param)        {            StringBuilder requestData = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>")                .Append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:rfc:functions\">")                .Append("  <soap:Body>")                .Append("<").Append(methodName)                .Append(" xmlns=\"http://tempuri.org/\">");            foreach (KeyValuePair<string, string> item in param)            {                requestData.Append("<").Append(item.Key).Append(">")                .Append(item.Value)                .Append("</").Append(item.Key).Append(">");            }            requestData.Append("</").Append(methodName).Append(">")            .Append("</soap:Body>")            .Append("</soap:Envelope>");            string val = requestData.ToString();            byte[] data = Encoding.UTF8.GetBytes(val);            return data;        }        /// <summary>        /// 获取数据(方法2) 兼容所有的(java soap 服务端和.net  soap 服务端)        /// </summary>        /// <param name="methodName">方法名称</param>        /// <param name="param">参数</param>        /// <returns></returns>        public static byte[] getRequestDataALL(string methodName, string param)        {            StringBuilder requestBuider = new StringBuilder();            requestBuider.Append("<soapenv:Envelope xmlns=\"urn:schemas-qad-com:xml-services\"  xmlns:qcom=\"urn:schemas-qad-com:xml-services:common\"  xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsa=\"http://www.w3.org/2005/08/addressing\" > ");            //requestBuider.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +            //    "<soapenv:Envelope xmlns=\"urn:schemas-qad-com:xml-services\"  xmlns:qcom=\"urn:schemas-qad-com:xml-services:common\"  xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsa=\"http://www.w3.org/2005/08/addressing\" > ");            requestBuider.Append(@"  <soapenv:Header>    <wsa:Action/>    <wsa:To>urn:services-qad-com:QADERP</wsa:To>    <wsa:MessageID>urn:services-qad-com::QADERP</wsa:MessageID>    <wsa:ReferenceParameters>      <qcom:suppressResponseDetail>true</qcom:suppressResponseDetail>    </wsa:ReferenceParameters>    <wsa:ReplyTo>      <wsa:Address>urn:services-qad-com:</wsa:Address>    </wsa:ReplyTo>  </soapenv:Header>");            requestBuider.Append("<soapenv:Body>");            //requestBuider.Append("<int:").Append(methodName).Append(">");            //requestBuider.Append("<int:message>").Append(param).Append("</int:message>");            //requestBuider.Append("</int:").Append(methodName).Append(">");            if (methodName == "transferInventory")            {                #region 转仓                requestBuider.Append(@" <transferInventory>      <qcom:dsSessionContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>domain</qcom:propertyName>          <qcom:propertyValue>AFCN</qcom:propertyValue>        </qcom:ttContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>scopeTransaction</qcom:propertyName>          <qcom:propertyValue>TRUE</qcom:propertyValue>        </qcom:ttContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>version</qcom:propertyName>          <qcom:propertyValue>eB_2</qcom:propertyValue>        </qcom:ttContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>mnemonicsRaw</qcom:propertyName>          <qcom:propertyValue>false</qcom:propertyValue>        </qcom:ttContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>username</qcom:propertyName>          <qcom:propertyValue>H3C-EDI</qcom:propertyValue>        </qcom:ttContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>password</qcom:propertyName>          <qcom:propertyValue>H3C-EDI</qcom:propertyValue>        </qcom:ttContext>      </qcom:dsSessionContext>        ");                requestBuider.Append($"{param}</transferInventory>");                #endregion            }            else            {                #region 工单                requestBuider.Append(@"<receiveWorkOrder>      <qcom:dsSessionContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>domain</qcom:propertyName>          <qcom:propertyValue>AFCN</qcom:propertyValue>        </qcom:ttContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>scopeTransaction</qcom:propertyName>          <qcom:propertyValue>true</qcom:propertyValue>        </qcom:ttContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>version</qcom:propertyName>          <qcom:propertyValue>eB_2</qcom:propertyValue>        </qcom:ttContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>mnemonicsRaw</qcom:propertyName>          <qcom:propertyValue>true</qcom:propertyValue>        </qcom:ttContext>                <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>username</qcom:propertyName>          <qcom:propertyValue>H3C-EDI</qcom:propertyValue>        </qcom:ttContext>        <qcom:ttContext>          <qcom:propertyQualifier>QAD</qcom:propertyQualifier>          <qcom:propertyName>password</qcom:propertyName>          <qcom:propertyValue>H3C-EDI</qcom:propertyValue>        </qcom:ttContext>      </qcom:dsSessionContext>         ");                requestBuider.Append($"{param}</receiveWorkOrder>");                #endregion            }            requestBuider.Append($"</soapenv:Body>");            requestBuider.Append("</soapenv:Envelope>");            string val = requestBuider.ToString();            byte[] data = Encoding.UTF8.GetBytes(val);            return data;        }    }}
 |