void ImyService.ClientSendMessage(string methodName, string xmlParam, string callOperator, string certificate) { ConsoleMsg(AddMsgClient("用户调用ClientSendMessage,发送命令:" + methodName + " 用户:" + callOperator + "\r\n" + xmlParam, myTransport.ClientToService)); //验证验证码 if (certificate != LoadBalanceService.GetConfigValue("MyCheck")) { mCB.ServerSendMessage(methodName, mywrong("certificate is wrong!")); return; } try { XElement xmdata = XElement.Parse(xmlParam); string fname = xmdata.Element("Function").Value; string fpath = xmdata.Element("xmlPath").Value; string fparam = xmdata.Element("Param").Value; switch (methodName) { case "CallBLL": BllClass bc = JsonConvert.DeserializeObject <BllClass>(fparam); Assembly assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + bc.DLLName); object obj = assembly.CreateInstance(bc.ClassName); object ret = obj.GetType().InvokeMember(bc.Function, BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null, obj, new object[] { fparam }); byte[] bts = IoRyClass.StringToBytes(mycorrect(ret.ToString(), methodName)); System.ComponentModel.BackgroundWorker bw1 = new System.ComponentModel.BackgroundWorker(); bw1.DoWork += new System.ComponentModel.DoWorkEventHandler(Bytes_DoWork); bw1.RunWorkerAsync(bts); ConsoleMsg(AddMsgClient(mycorrect(ret.ToString(), methodName), myTransport.ServiceToClient)); break; default: ConsoleErrorMsg(AddMsgClient("用户调用ClientSendMessage,发送命令:" + methodName + " 用户:" + callOperator + "\r\n" + xmlParam + "\r\n" + "Error报错:" + "服务不提供此方法!", myTransport.ServiceToClient)); mCB.ServerSendMessage(methodName, mywrong("服务不提供此方法!")); break; } } catch (Exception me) { string exmsg = ""; while (me.InnerException != null) { exmsg += me.Message + "\r\n------>\r\n"; me = me.InnerException; } exmsg += me.Message; ConsoleErrorMsg(AddMsgClient("用户调用ClientSendMessage,发送命令:" + methodName + " 用户:" + callOperator + "\r\n" + xmlParam + "\r\n" + "Error报错:" + exmsg, myTransport.ServiceToClient)); mCB.ServerSendMessage(methodName, mywrong(exmsg)); } }
string ImyService.SynMessage(string methodName, string xmlParam, string callOperator, string certificate) { ConsoleMsg(AddMsgClient("用户调用SynMessage,发送命令:" + methodName + " 用户:" + callOperator + "\r\n" + xmlParam, myTransport.ClientToService)); //验证验证码 if (certificate != LoadBalanceService.GetConfigValue("MyCheck")) { return(mywrong("certificate is wrong!")); } try { XElement xmdata = XElement.Parse(xmlParam); string XmlFunction = xmdata.Element("Function").Value; string fpath = xmdata.Element("xmlPath").Value; string fparam = xmdata.Element("Param").Value; switch (methodName) { case "GetServerStatus": string msgxml = this.mycorrect(LoadBalanceService.CPULoad.ToString(), methodName); ConsoleMsg(AddMsgClient(msgxml, myTransport.ServiceToClient)); return(msgxml); case "CallBLL": BllClass bc = JsonConvert.DeserializeObject <BllClass>(fparam); Assembly assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + bc.DLLName); object obj = assembly.CreateInstance(bc.ClassName); object ret = obj.GetType().InvokeMember(bc.Function, BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null, obj, new object[] { fparam }); string cbreturn = mycorrect(ret.ToString(), methodName); ConsoleMsg(AddMsgClient(mycorrect(ret.ToString(), methodName), myTransport.ServiceToClient)); return(cbreturn); default: ConsoleErrorMsg(AddMsgClient("用户调用SynMessage,发送命令:" + methodName + " 用户:" + callOperator + "\r\n" + xmlParam + "\r\n" + "Error报错:" + "服务不提供此方法!", myTransport.ServiceToClient)); return(mywrong("服务不提供此方法!")); } } catch (Exception me) { string exmsg = ""; while (me.InnerException != null) { exmsg += me.Message + "\r\n------>\r\n"; me = me.InnerException; } exmsg += me.Message; ConsoleErrorMsg(AddMsgClient("用户调用SynMessage,发送命令:" + methodName + " 用户:" + callOperator + "\r\n" + xmlParam + "\r\n" + "Error报错:" + exmsg, myTransport.ServiceToClient)); return(mywrong(exmsg)); } }
static void KeepChecking(object sender, System.ComponentModel.DoWorkEventArgs e) { while (true) { PerformanceCounter pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total"); pcCpuLoad.NextValue(); Thread.Sleep(1000); float cpuLoad = pcCpuLoad.NextValue(); //这里如果CPU使用率变化超过多少,主动通知所有客户端 cpuload的范围是0~100 if (System.Math.Abs(LoadBalanceService.CPULoad - cpuLoad) > CPULevelNum) { //通知 LoadBalanceService.SendtoAll("GetServerStatus", cpuLoad.ToString()); } LoadBalanceService.CPULoad = cpuLoad; } }