SoapHelper.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Text;
  7. using System.Web;
  8. namespace WMS.Util
  9. {
  10. public static class WebServiceCall
  11. {
  12. public static string getsoapresource(string url, string datastr)
  13. {
  14. try
  15. {
  16. //Encoding encoding = Encoding.GetEncoding("utf-8");
  17. Encoding encoding = Encoding.GetEncoding("GB2312");
  18. byte[] data = encoding.GetBytes(datastr);
  19. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  20. //发送数据
  21. request.Method = "POST";
  22. request.ContentType = "Content-Type:text/xml;charset=utf-8";
  23. request.ContentLength = data.Length;
  24. Stream requestStream = request.GetRequestStream();
  25. requestStream.Write(data, 0, data.Length);
  26. requestStream.Close();
  27. //接收返回值
  28. HttpWebResponse res = (HttpWebResponse)request.GetResponse();
  29. StreamReader sReader = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);
  30. string strBack = sReader.ReadToEnd();
  31. //Response.Write(strBack);
  32. sReader.Close();
  33. res.Close();
  34. return strBack;
  35. }
  36. catch (Exception ex)
  37. {
  38. throw ex;
  39. }
  40. }
  41. //public static string mUrl = "http://localhost:53342/WebService.asmx";
  42. /// <summary>
  43. /// 调用接口
  44. /// </summary>
  45. /// <param name="methodName">方法名称</param>
  46. /// <param name="param">参数名称</param>
  47. /// <returns>返回值</returns>
  48. public static string callWebService(string mUrl, string methodName, string param)
  49. {
  50. //Encoding encoding = Encoding.GetEncoding("utf-8");
  51. Encoding encoding = Encoding.GetEncoding("utf-8");
  52. //获取请求数据
  53. byte[] data = getRequestDataALL(methodName, param); // getRequestData(methodName, param);
  54. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(mUrl);
  55. request.Method = "POST";
  56. request.ContentType = "Content-Type:text/xml;charset=utf-8";
  57. string mSoapAction = "http://tempuri.org/" + methodName;
  58. request.Headers.Add("SOAPAction", mSoapAction);
  59. request.ContentLength = data.Length;
  60. Stream rStream = request.GetRequestStream();
  61. rStream.Write(data, 0, data.Length);
  62. rStream.Close();
  63. WebResponse response = request.GetResponse();
  64. Stream dataStream = response.GetResponseStream();
  65. StreamReader reader = new StreamReader(dataStream);
  66. string result = reader.ReadToEnd();
  67. dataStream.Close();
  68. response.Close();
  69. return result;
  70. }
  71. /// <summary>
  72. /// 获取请求内容(方法1) 适合 .Net
  73. /// </summary>
  74. /// <param name="methodName">方法名称</param>
  75. /// <param name="param">参数</param>
  76. /// <returns></returns>
  77. public static byte[] getRequestData(string methodName, Dictionary<string, string> param)
  78. {
  79. StringBuilder requestData = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
  80. .Append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:rfc:functions\">")
  81. .Append(" <soap:Body>")
  82. .Append("<").Append(methodName)
  83. .Append(" xmlns=\"http://tempuri.org/\">");
  84. foreach (KeyValuePair<string, string> item in param)
  85. {
  86. requestData.Append("<").Append(item.Key).Append(">")
  87. .Append(item.Value)
  88. .Append("</").Append(item.Key).Append(">");
  89. }
  90. requestData.Append("</").Append(methodName).Append(">")
  91. .Append("</soap:Body>")
  92. .Append("</soap:Envelope>");
  93. string val = requestData.ToString();
  94. byte[] data = Encoding.UTF8.GetBytes(val);
  95. return data;
  96. }
  97. /// <summary>
  98. /// 获取数据(方法2) 兼容所有的(java soap 服务端和.net soap 服务端)
  99. /// </summary>
  100. /// <param name="methodName">方法名称</param>
  101. /// <param name="param">参数</param>
  102. /// <returns></returns>
  103. public static byte[] getRequestDataALL(string methodName, string param)
  104. {
  105. StringBuilder requestBuider = new StringBuilder();
  106. 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\" > ");
  107. //requestBuider.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
  108. // "<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\" > ");
  109. requestBuider.Append(@"
  110. <soapenv:Header>
  111. <wsa:Action/>
  112. <wsa:To>urn:services-qad-com:QADERP</wsa:To>
  113. <wsa:MessageID>urn:services-qad-com::QADERP</wsa:MessageID>
  114. <wsa:ReferenceParameters>
  115. <qcom:suppressResponseDetail>true</qcom:suppressResponseDetail>
  116. </wsa:ReferenceParameters>
  117. <wsa:ReplyTo>
  118. <wsa:Address>urn:services-qad-com:</wsa:Address>
  119. </wsa:ReplyTo>
  120. </soapenv:Header>");
  121. requestBuider.Append("<soapenv:Body>");
  122. //requestBuider.Append("<int:").Append(methodName).Append(">");
  123. //requestBuider.Append("<int:message>").Append(param).Append("</int:message>");
  124. //requestBuider.Append("</int:").Append(methodName).Append(">");
  125. if (methodName == "transferInventory")
  126. {
  127. #region 转仓
  128. requestBuider.Append(@"
  129. <transferInventory>
  130. <qcom:dsSessionContext>
  131. <qcom:ttContext>
  132. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  133. <qcom:propertyName>domain</qcom:propertyName>
  134. <qcom:propertyValue>AFCN</qcom:propertyValue>
  135. </qcom:ttContext>
  136. <qcom:ttContext>
  137. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  138. <qcom:propertyName>scopeTransaction</qcom:propertyName>
  139. <qcom:propertyValue>TRUE</qcom:propertyValue>
  140. </qcom:ttContext>
  141. <qcom:ttContext>
  142. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  143. <qcom:propertyName>version</qcom:propertyName>
  144. <qcom:propertyValue>eB_2</qcom:propertyValue>
  145. </qcom:ttContext>
  146. <qcom:ttContext>
  147. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  148. <qcom:propertyName>mnemonicsRaw</qcom:propertyName>
  149. <qcom:propertyValue>false</qcom:propertyValue>
  150. </qcom:ttContext>
  151. <qcom:ttContext>
  152. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  153. <qcom:propertyName>username</qcom:propertyName>
  154. <qcom:propertyValue>H3C-EDI</qcom:propertyValue>
  155. </qcom:ttContext>
  156. <qcom:ttContext>
  157. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  158. <qcom:propertyName>password</qcom:propertyName>
  159. <qcom:propertyValue>H3C-EDI</qcom:propertyValue>
  160. </qcom:ttContext>
  161. </qcom:dsSessionContext>
  162. ");
  163. requestBuider.Append($"{param}</transferInventory>");
  164. #endregion
  165. }
  166. else
  167. {
  168. #region 工单
  169. requestBuider.Append(@"
  170. <receiveWorkOrder>
  171. <qcom:dsSessionContext>
  172. <qcom:ttContext>
  173. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  174. <qcom:propertyName>domain</qcom:propertyName>
  175. <qcom:propertyValue>AFCN</qcom:propertyValue>
  176. </qcom:ttContext>
  177. <qcom:ttContext>
  178. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  179. <qcom:propertyName>scopeTransaction</qcom:propertyName>
  180. <qcom:propertyValue>true</qcom:propertyValue>
  181. </qcom:ttContext>
  182. <qcom:ttContext>
  183. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  184. <qcom:propertyName>version</qcom:propertyName>
  185. <qcom:propertyValue>eB_2</qcom:propertyValue>
  186. </qcom:ttContext>
  187. <qcom:ttContext>
  188. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  189. <qcom:propertyName>mnemonicsRaw</qcom:propertyName>
  190. <qcom:propertyValue>true</qcom:propertyValue>
  191. </qcom:ttContext>
  192. <qcom:ttContext>
  193. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  194. <qcom:propertyName>username</qcom:propertyName>
  195. <qcom:propertyValue>H3C-EDI</qcom:propertyValue>
  196. </qcom:ttContext>
  197. <qcom:ttContext>
  198. <qcom:propertyQualifier>QAD</qcom:propertyQualifier>
  199. <qcom:propertyName>password</qcom:propertyName>
  200. <qcom:propertyValue>H3C-EDI</qcom:propertyValue>
  201. </qcom:ttContext>
  202. </qcom:dsSessionContext>
  203. ");
  204. requestBuider.Append($"{param}</receiveWorkOrder>");
  205. #endregion
  206. }
  207. requestBuider.Append($"</soapenv:Body>");
  208. requestBuider.Append("</soapenv:Envelope>");
  209. string val = requestBuider.ToString();
  210. byte[] data = Encoding.UTF8.GetBytes(val);
  211. return data;
  212. }
  213. }
  214. }