using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.ServiceModel; using QMFrameWork.Common.Serialization; using QMFrameWork.ServiceInterface; using QMFrameWork.ServiceLibrary; using QM.Exchange.Core.Services; using QM.Exchange.Interface; namespace QM.Exchange.Core { /// /// 通用服务 /// public class GeneralMessageService : IGeneralMessageService { /// /// 消息接收 /// /// 消息 public void RequestServer(CommonMessage message) { try { MessageQueueService.Enqueue(message); } catch (Exception e) { throw new FaultException(e.Message); } } /// /// 接收服务请求 /// /// 请求(不支持复杂类型) /// 返回结果(不支持复杂类型) public string RecevieRequest(string request) { ServiceRequest r = JsonConvertHelper.GetDeserialize(request); object result = null; try { if (r.FunctionName == "ServiceInit") return "success"; if (string.IsNullOrEmpty(request) == true) throw new FaultException("请求头不能为空。"); //登录验证 new AuthorizationManager().IsAuthorization(r); Stopwatch sw = new Stopwatch(); sw.Start(); result = new ServiceFactory().InvokeService(r); sw.Stop(); //记录执行日志 this.RecordServiceLog(r, sw.ElapsedMilliseconds); return JsonConvertHelper.GetSerializes(result); } catch (Exception ex) { this.RecordServiceLog(r, ex); throw new FaultException(ex.Message); } } #region 记录服务执行日志 /// /// 记录服务执行日志 /// /// 请求 /// 执行时间 private void RecordServiceLog(ServiceRequest request, long time) { //记录执行日志 string clientIP = ""; if (request != null && request.UserCredential != null && request.UserCredential.ClientIP != null) { clientIP = request.UserCredential.ClientIP; } string info = "执行服务" + request.FunctionName + ",完成时间为:" + time + "毫秒"; string userName = ""; if (request != null && request.UserCredential != null) { userName = request.UserCredential.UserName; } QMFrameWork.Log.LogManager.LogHelper.Info( new QMFrameWork.Log.LogInfo { ClientIP = clientIP, UserName = userName, Info = info }); } #endregion #region 记录服务异常日志 private void RecordServiceLog(ServiceRequest r, Exception ex) { string info = "执行服务"; if (r != null) info += r.FunctionName; string clientIP = ""; if (r != null && r.UserCredential != null && r.UserCredential.ClientIP != null) { clientIP = r.UserCredential.ClientIP; } string userName = ""; if (r != null && r.UserCredential != null) { userName = r.UserCredential.UserName; } QMFrameWork.Log.LogManager.LogHelper.Error( new QMFrameWork.Log.LogInfo { ClientIP = clientIP, UserName = userName, Info = info, ErrorInfo = ex }); } #endregion } }