using System; using System.Collections.Generic; using System.Linq; using System.Web; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Configuration; using DK.XuWei.WebMes; /// /// 调用MES的WCF接口通用方法 xuwei 2019-10-26 /// public class WCF { /// /// MES服务器IP地址。 /// public string IP; /// /// MES服务WCF调用参数。 /// public JObject Para; /// /// 实例化MES服务WCF调用方法。 /// public WCF() { //从Web.config读取服务器IP IP = ConfigurationManager.AppSettings["ProductCheckServer"].ToString(); Para = new JObject(); } /// /// 初始化默认WCF参数,如果存在Session从Session中加载,否则实例化空参数 /// /// 参数名称字符串,以逗号分隔。 /// public JObject LoadParaBySession(string paraNames = "accountId,accountCode,userId,userName,userCode,userPassword,sessionKey") { JObject para = new JObject(); string[] sessionNames = paraNames.Split(','); for (int i = 0; i < sessionNames.Length; i++) { if (HttpContext.Current.Session[sessionNames[i]] is object) para.Add(new JProperty(sessionNames[i], HttpContext.Current.Session[sessionNames[i]])); } return para; } /// /// 初始化默认登录参数 /// /// public JObject LoadParaByLoginDefault() { JObject para = new JObject( new JProperty("macAddress", "xx:xx:xx:xx:xx:xx"), new JProperty("ipAddress", "250.250.250.250"), new JProperty("phoneCode", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"), new JProperty("phoneType", "WebMes"), new JProperty("appVersion", "1.0"), new JProperty("systemType", "WindowsServer"), new JProperty("systemVersion", "2008R2") ); return para; } /// /// 获取用户session状态 /// /// public JObject GetSession() { JObject para = new JObject(); for (int i = 0; i < HttpContext.Current.Session.Count; i++) { if (HttpContext.Current.Session[i] is object) para.Add(new JProperty(HttpContext.Current.Session.Keys[i], HttpContext.Current.Session[i])); } return para; } /// /// 登录并记录Session数据 /// /// 完整URL,但不包括IP部分。 /// public string Login(string URL = "", string GoURL = "") { //提交post数据 string jsonStr = JsonClient.Post(IP + URL, JsonConvert.SerializeObject(Para)); JObject json = JObject.Parse(jsonStr); //登录成功记录Session if (json["d"]["Status"].ToString() == "0") { Para.Add(new JProperty("accountId", json["d"]["AccountID"].ToString())); Para.Add(new JProperty("userId", json["d"]["UserID"].ToString())); Para.Add(new JProperty("userName", json["d"]["UserName"].ToString())); Para.Add(new JProperty("sessionKey", json["d"]["SessionKey"].ToString())); SetSessionByPara(); } JObject result = new JObject( new JProperty("Status", json["d"]["Status"].ToString()), new JProperty("Message", json["d"]["Message"].ToString()), new JProperty("GoUrl", GoURL) ); return result.ToString(); } /// /// 从Para记录 Session 默认 accountCode,userCode,userPassword,sessionKey /// /// 要清除的Session串用逗号分隔 public void SetSessionByPara(string paraNames = "accountId,accountCode,userId,userName,userCode,userPassword,sessionKey") { string[] sessionNames = paraNames.Split(','); for (int i = 0; i < sessionNames.Length; i++) { HttpContext.Current.Session[sessionNames[i]] = Para[sessionNames[i]].ToString(); } } /// /// 清除 Session 默认 accountCode,userCode,userPassword,sessionKey /// /// 要清除的Session串用逗号分隔 public void ClearSessionByPara(string paraNames = "accountCode,userCode,userPassword,sessionKey") { string[] sessionNames = paraNames.Split(','); for (int i = 0; i < sessionNames.Length; i++) { HttpContext.Current.Session[sessionNames[i]] = null; HttpContext.Current.Session.Remove(sessionNames[i]); } } /// /// 退出登录,清除所有Session /// /// public string LogOut() { ClearSessionByPara(); return ""; } /// /// 向URL指定的WCF接口提交POST数据 /// /// 完整URL,但不包括IP部分。 /// public string Post(string URL = "") { string jsonStr = ""; //xuwei fix 2020-06-17 检查出错接口详细问题 写入log try { //提交post数据 jsonStr = JsonClient.Post(IP + URL, JsonConvert.SerializeObject(Para)); JObject json = JObject.Parse(jsonStr); //状态为0,返回内容不为空才是查询到结果 if (json["d"]["Status"].ToString() == "0" && json["d"]["Result"].ToString() != "[]") { jsonStr = json["d"]["Result"].ToString(); if (jsonStr == "") jsonStr = json["d"]["Message"].ToString(); } else { //jsonStr = json["d"]["Message"].ToString(); jsonStr = ""; } //Exception ex = new Exception("OK 数据接口返回值(" + IP + URL + "):" + jsonStr); //Curtain.Log.Logger.Error(ex); return jsonStr; } catch { Exception ex = new Exception("ERR 数据接口返回值(IP:" + IP + " URL:" + URL + " PARA:" + JsonConvert.SerializeObject(Para) + ") RESULT:" + jsonStr); Curtain.Log.Logger.Error(ex); return ""; } } }