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 "";
}
}
}