WCF.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using Newtonsoft.Json;
  6. using Newtonsoft.Json.Linq;
  7. using System.Configuration;
  8. using DK.XuWei.WebMes;
  9. /// <summary>
  10. /// 调用MES的WCF接口通用方法 xuwei 2019-10-26
  11. /// </summary>
  12. public class WCF
  13. {
  14. /// <summary>
  15. /// MES服务器IP地址。
  16. /// </summary>
  17. public string IP;
  18. /// <summary>
  19. /// MES服务WCF调用参数。
  20. /// </summary>
  21. public JObject Para;
  22. /// <summary>
  23. /// 实例化MES服务WCF调用方法。
  24. /// </summary>
  25. public WCF()
  26. {
  27. //从Web.config读取服务器IP
  28. IP = ConfigurationManager.AppSettings["ProductCheckServer"].ToString();
  29. Para = new JObject();
  30. }
  31. /// <summary>
  32. /// 初始化默认WCF参数,如果存在Session从Session中加载,否则实例化空参数
  33. /// </summary>
  34. /// <param name="paraNames">参数名称字符串,以逗号分隔。</param>
  35. /// <returns></returns>
  36. public JObject LoadParaBySession(string paraNames = "accountId,accountCode,userId,userName,userCode,userPassword,sessionKey")
  37. {
  38. JObject para = new JObject();
  39. string[] sessionNames = paraNames.Split(',');
  40. for (int i = 0; i < sessionNames.Length; i++)
  41. {
  42. if (HttpContext.Current.Session[sessionNames[i]] is object)
  43. para.Add(new JProperty(sessionNames[i], HttpContext.Current.Session[sessionNames[i]]));
  44. }
  45. return para;
  46. }
  47. /// <summary>
  48. /// 初始化默认登录参数
  49. /// </summary>
  50. /// <returns></returns>
  51. public JObject LoadParaByLoginDefault()
  52. {
  53. JObject para = new JObject(
  54. new JProperty("macAddress", "xx:xx:xx:xx:xx:xx"),
  55. new JProperty("ipAddress", "250.250.250.250"),
  56. new JProperty("phoneCode", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
  57. new JProperty("phoneType", "WebMes"),
  58. new JProperty("appVersion", "1.0"),
  59. new JProperty("systemType", "WindowsServer"),
  60. new JProperty("systemVersion", "2008R2")
  61. );
  62. return para;
  63. }
  64. /// <summary>
  65. /// 获取用户session状态
  66. /// </summary>
  67. /// <returns></returns>
  68. public JObject GetSession()
  69. {
  70. JObject para = new JObject();
  71. for (int i = 0; i < HttpContext.Current.Session.Count; i++)
  72. {
  73. if (HttpContext.Current.Session[i] is object)
  74. para.Add(new JProperty(HttpContext.Current.Session.Keys[i], HttpContext.Current.Session[i]));
  75. }
  76. return para;
  77. }
  78. /// <summary>
  79. /// 登录并记录Session数据
  80. /// </summary>
  81. /// <param name="URL">完整URL,但不包括IP部分。</param>
  82. /// <returns></returns>
  83. public string Login(string URL = "", string GoURL = "")
  84. {
  85. //提交post数据
  86. string jsonStr = JsonClient.Post(IP + URL, JsonConvert.SerializeObject(Para));
  87. JObject json = JObject.Parse(jsonStr);
  88. //登录成功记录Session
  89. if (json["d"]["Status"].ToString() == "0")
  90. {
  91. Para.Add(new JProperty("accountId", json["d"]["AccountID"].ToString()));
  92. Para.Add(new JProperty("userId", json["d"]["UserID"].ToString()));
  93. Para.Add(new JProperty("userName", json["d"]["UserName"].ToString()));
  94. Para.Add(new JProperty("sessionKey", json["d"]["SessionKey"].ToString()));
  95. SetSessionByPara();
  96. }
  97. JObject result = new JObject(
  98. new JProperty("Status", json["d"]["Status"].ToString()),
  99. new JProperty("Message", json["d"]["Message"].ToString()),
  100. new JProperty("GoUrl", GoURL)
  101. );
  102. return result.ToString();
  103. }
  104. /// <summary>
  105. /// 从Para记录 Session 默认 accountCode,userCode,userPassword,sessionKey
  106. /// </summary>
  107. /// <param name="paraNames">要清除的Session串用逗号分隔</param>
  108. public void SetSessionByPara(string paraNames = "accountId,accountCode,userId,userName,userCode,userPassword,sessionKey")
  109. {
  110. string[] sessionNames = paraNames.Split(',');
  111. for (int i = 0; i < sessionNames.Length; i++)
  112. {
  113. HttpContext.Current.Session[sessionNames[i]] = Para[sessionNames[i]].ToString();
  114. }
  115. }
  116. /// <summary>
  117. /// 清除 Session 默认 accountCode,userCode,userPassword,sessionKey
  118. /// </summary>
  119. /// <param name="paraNames">要清除的Session串用逗号分隔</param>
  120. public void ClearSessionByPara(string paraNames = "accountCode,userCode,userPassword,sessionKey")
  121. {
  122. string[] sessionNames = paraNames.Split(',');
  123. for (int i = 0; i < sessionNames.Length; i++)
  124. {
  125. HttpContext.Current.Session[sessionNames[i]] = null;
  126. HttpContext.Current.Session.Remove(sessionNames[i]);
  127. }
  128. }
  129. /// <summary>
  130. /// 退出登录,清除所有Session
  131. /// </summary>
  132. /// <returns></returns>
  133. public string LogOut()
  134. {
  135. ClearSessionByPara();
  136. return "";
  137. }
  138. /// <summary>
  139. /// 向URL指定的WCF接口提交POST数据
  140. /// </summary>
  141. /// <param name="URL">完整URL,但不包括IP部分。</param>
  142. /// <returns></returns>
  143. public string Post(string URL = "")
  144. {
  145. string jsonStr = "";
  146. //xuwei fix 2020-06-17 检查出错接口详细问题 写入log
  147. try
  148. {
  149. //提交post数据
  150. jsonStr = JsonClient.Post(IP + URL, JsonConvert.SerializeObject(Para));
  151. JObject json = JObject.Parse(jsonStr);
  152. //状态为0,返回内容不为空才是查询到结果
  153. if (json["d"]["Status"].ToString() == "0" && json["d"]["Result"].ToString() != "[]")
  154. {
  155. jsonStr = json["d"]["Result"].ToString();
  156. if (jsonStr == "") jsonStr = json["d"]["Message"].ToString();
  157. }
  158. else
  159. {
  160. //jsonStr = json["d"]["Message"].ToString();
  161. jsonStr = "";
  162. }
  163. //Exception ex = new Exception("OK 数据接口返回值(" + IP + URL + "):" + jsonStr);
  164. //Curtain.Log.Logger.Error(ex);
  165. return jsonStr;
  166. }
  167. catch
  168. {
  169. Exception ex = new Exception("ERR 数据接口返回值(IP:" + IP + " URL:" + URL + " PARA:" + JsonConvert.SerializeObject(Para) + ") RESULT:" + jsonStr);
  170. Curtain.Log.Logger.Error(ex);
  171. return "";
  172. }
  173. }
  174. }