/// <summary> /// 按应用运行时名称取没被处理的监听的事件。 /// </summary> /// <param name="appRuntimeName">应用运行时名称。</param> /// <returns></returns> public List <EventDC> GetEventList(string appRuntimeName) { List <RemoteEventEntity> EventList = new List <RemoteEventEntity>(); lock (locker) { EventList = dataPers.GetQueryable <RemoteEventEntity>() .Where(ww => ww.AppRuntimeName == appRuntimeName && ww.HandleState == HandleState.Unstarted).ToList(); } List <EventDC> EventDcList = new List <EventDC>(); foreach (var Event in EventList) { EventDC aEDc = new EventDC(); aEDc.EventKey = Event.EventKey; aEDc.EventName = Event.EventName; ParameterDC message = new ParameterDC(); message.JsonValue = Event.MessageJsonValue; message.TypeQualifiedName = Event.MessageTypeQuaName; aEDc.Message = message; aEDc.SenderInterfaceName = Event.SenderInterfaceName; aEDc.SenderTypeName = Event.SenderTypeName; EventDcList.Add(aEDc); } return(EventDcList); }
/// <summary> /// 远程事件的播送方法。 /// </summary> /// <param name="sender">发送者。这个参数用于计算响应者路由但不会发往远程响应端。</param> /// <param name="args">参数,参数将传弟到响应端。要发给远程响应端的数据必须放在这个参数中。</param> public void CastEvent <T>(object sender, RemoteEventArgs <T> args) where T : class, new() { Type senderType = sender.GetType(); EventDC evData = new EventDC(); evData.EventKey = Guid.NewGuid().ToString("N"); if (senderType.GetEvent(args.EventName) != null || senderType.GetEvent(args.EventName).EventHandlerType.FullName == typeof(RemoteEventHandler <>).FullName) { evData.EventName = args.EventName; } else { throw new Exception("不存在RemoteEventHandler型事件" + evData.EventName); } Type[] interfaces = senderType.GetInterfaces(); List <Type> inheritInterfaceList = interfaces.Where(ww => (ww.GetMembers().Select(ss => ss.Name)).Contains(args.EventName)).ToList(); if (inheritInterfaceList.Count != 1) { throw new Exception("不存在或多于一个事件发送者所继承的接口中声名事件" + evData.EventName); } else { evData.SenderInterfaceName = inheritInterfaceList.First().FullName; } ParameterDC Message = new ParameterDC(); Message.TypeQualifiedName = args.Message.GetType().AssemblyQualifiedName; Message.JsonValue = ServiceTaker.GetService <IJsonSerializer>().Serialize(args.Message); evData.Message = Message; evData.SenderTypeName = senderType.FullName; IEventOC evOperation = ServiceTaker.GetRemoteService <IEventOC>(); evOperation.CastRemoteEvent(evData); }
public object RequseteWeb(string apiMapKey, string apiInterfaceName, string methodName, List <object> parameterList, string[] types, string apiUrl = "") { HttpWebResponse response = null; Stream streamResponse = null; try { MethodDC theContract = new MethodDC(); theContract.ApiConfigKey = apiMapKey; theContract.InterfaceName = apiInterfaceName; theContract.MethodName = methodName; theContract.TypeArguments = types; List <ParameterDC> webParamerList = new List <ParameterDC>(); foreach (object param in parameterList) { ParameterDC aWebParamer = new ParameterDC(); aWebParamer.TypeQualifiedName = param.GetType().AssemblyQualifiedName; aWebParamer.JsonValue = Serializer.Serialize(param); webParamerList.Add(aWebParamer); } theContract.ParameterList = webParamerList; string jsonContract = Serializer.Serialize(theContract); //TODO:加密或压缩对jsonContract,密文可根据日期变化。服务端验证密文 MethodDC vdf = Serializer.Deserialize <MethodDC>(jsonContract); byte[] PostData = Encoding.UTF8.GetBytes(jsonContract); var watch = new System.Diagnostics.Stopwatch(); watch.Start(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiUrl); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.GetRequestStream().Write(PostData, 0, PostData.Length); request.ContentType = "text/xml"; ServicePoint currentServicePoint = request.ServicePoint; currentServicePoint.ConnectionLimit = 1000; response = (HttpWebResponse)request.GetResponse(); streamResponse = response.GetResponseStream(); string strResponse = string.Empty; //如果服务端采用了GZIP压缩,则先解压缩。 if (response.ContentEncoding.ToLower().Contains("gzip")) { using (GZipStream gz = new GZipStream(streamResponse, CompressionMode.Decompress)) { using (StreamReader readerGzip = new StreamReader(gz, Encoding.UTF8)) { strResponse = readerGzip.ReadToEnd(); } } } else { using (StreamReader streamRead = new StreamReader(streamResponse, Encoding.UTF8)) { strResponse = streamRead.ReadToEnd(); } } //TODO:解密或解压缩对strResponse MethodDC reObj = Serializer.Deserialize <MethodDC>(strResponse); watch.Stop(); //写请求日志,用于跟踪请求的时间和数据大小。 string writeWebRequestLog = System.Configuration.ConfigurationManager.AppSettings["WriteClientHttpWebRequestLog"]; if (writeWebRequestLog == null) { writeWebRequestLog = "false"; } if (bool.Parse(writeWebRequestLog) && !apiInterfaceName.Contains("DBClientBase")) { Task task = Task.Factory.StartNew(() => { byte[] responseData = Encoding.UTF8.GetBytes(strResponse); var counter = watch.ElapsedMilliseconds; string Parameters = ""; for (int i = 0; i < theContract.ParameterList.Count; i++) { Parameters += theContract.ParameterList[i].JsonValue + "@"; } CountUserData countUserData = new CountUserData { ApiInterfaceName = apiInterfaceName, ClientComputerIP = UserProfiles.ClientComputerGuid, UserName = UserProfiles.UserName, LocationName = UserProfiles.HospitalName, MethodName = methodName, CounterTime = counter, ResponseData = (responseData.Length / 1024.00).ToString("f0"), OperTime = DateTime.Now, ParameterContents = Parameters, }; Orm.Config.Service.DBClientService.Add <CountUserData>(countUserData); }); //string strRequestTimeLog = string.Format(" 诊所:{0} ip地址:{1} 操作人:{2} 操作时间:{3} 接口:{4}调用方法:{5} 请求响应时间:{6}(毫秒) 返回值大小:{7}Kb", // UserProfiles.LocationName, UserProfiles.ClientComputerGuid,UserProfiles.UserName,DateTime.Now, apiInterfaceName, methodName, counter.ToString(), (responseData.Length / 1024.00).ToString("f0")); //WriteLog(strRequestTimeLog, null); } if (reObj.Result.HasException) { if (reObj.Result.ExceptionState == 1) { System.Windows.Forms.MessageBox.Show(reObj.Result.ExceptionMessage, "消息", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); return(null); } else if (reObj.Result.ExceptionState == 2) { System.Windows.Forms.MessageBox.Show(reObj.Result.ExceptionMessage, "警告", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); return(null); } else if (reObj.Result.ExceptionState == 3) { System.Windows.Forms.MessageBox.Show(reObj.Result.ExceptionMessage, "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return(null); } else { throw new Exception("Message: " + reObj.Result.ExceptionMessage + "\r\n" + "Stack: " + reObj.Result.ExceptionStack); } } else { Type relType = Type.GetType(reObj.Result.TypeQualifiedName); object relResult = null; if (relType.Name.ToLower() != "void") { relResult = Serializer.Deserialize(reObj.Result.JsonValue, relType); } return(relResult); } } finally { if (streamResponse != null) { streamResponse.Close(); } if (response != null) { response.Close(); } } }
/// <summary> /// http请求(行心云) /// </summary> /// <param name="apiMapKey"></param> /// <param name="apiInterfaceName"></param> /// <param name="methodName"></param> /// <param name="parameterList"></param> /// <param name="types"></param> /// <param name="apiUrl"></param> /// <returns></returns> public object HttpRequest(string apiInterfaceName, string methodName, List <object> parameterList, string[] types, string apiUrl = "") { HttpWebResponse response = null; Stream streamResponse = null; try { MethodDC transDataClass = new MethodDC(); transDataClass.ApiConfigKey = apiInterfaceName; transDataClass.InterfaceName = apiInterfaceName; transDataClass.MethodName = methodName; transDataClass.TypeArguments = types; List <ParameterDC> webParamerList = new List <ParameterDC>(); foreach (object param in parameterList) { ParameterDC aWebParamer = new ParameterDC(); aWebParamer.TypeQualifiedName = param.GetType().AssemblyQualifiedName; aWebParamer.JsonValue = JsonConvert.SerializeObject(param); webParamerList.Add(aWebParamer); } transDataClass.ParameterList = webParamerList; //将要传递的数据序列化成json格式 string jsonContract = JsonConvert.SerializeObject(transDataClass); //TODO:加密或压缩对jsonContract,密文可根据日期变化。服务端验证密文 MethodDC vdf = JsonConvert.DeserializeObject <MethodDC>(jsonContract); //将要传递的json转成byte[] byte[] PostData = Encoding.UTF8.GetBytes(jsonContract); var watch = new System.Diagnostics.Stopwatch(); watch.Start(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiUrl); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.GetRequestStream().Write(PostData, 0, PostData.Length); request.ContentType = "text/xml; charset=utf-8"; ServicePoint currentServicePoint = request.ServicePoint; currentServicePoint.ConnectionLimit = 1000; response = (HttpWebResponse)request.GetResponse(); streamResponse = response.GetResponseStream(); string strResponse = string.Empty; //如果服务端采用了GZIP压缩,则先解压缩。 if (response.ContentEncoding.ToLower().Contains("gzip")) { using (GZipStream gz = new GZipStream(streamResponse, CompressionMode.Decompress)) { using (StreamReader readerGzip = new StreamReader(gz, Encoding.UTF8)) { strResponse = readerGzip.ReadToEnd(); } } } else { using (StreamReader streamRead = new StreamReader(streamResponse, Encoding.UTF8)) { strResponse = streamRead.ReadToEnd(); } } //TODO:解密或解压缩对strResponse MethodDC reObj = JsonConvert.DeserializeObject <MethodDC>(strResponse); watch.Stop(); //写请求日志,用于跟踪请求的时间和数据大小。 string writeWebRequestLog = System.Configuration.ConfigurationManager.AppSettings["WriteClientHttpWebRequestLog"]; if (writeWebRequestLog == null) { writeWebRequestLog = "false"; } if (bool.Parse(writeWebRequestLog) && watch.ElapsedMilliseconds > 1000) { byte[] responseData = Encoding.UTF8.GetBytes(strResponse); var counter = watch.ElapsedMilliseconds; string strRequestTimeLog = string.Format(" 接口:{0} 调用方法:{1} 请求响应时间:{2}(毫秒) 返回值大小:{3}Kb", apiInterfaceName, methodName, counter.ToString(), (responseData.Length / 1024.00).ToString("f0")); WriteLog(strRequestTimeLog, null); } if (reObj.Result.HasException) { if (reObj.Result.ExceptionState == 1) { System.Windows.Forms.MessageBox.Show(reObj.Result.ExceptionMessage, "消息", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); return(null); } else if (reObj.Result.ExceptionState == 2) { System.Windows.Forms.MessageBox.Show(reObj.Result.ExceptionMessage, "警告", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); return(null); } else if (reObj.Result.ExceptionState == 3) { System.Windows.Forms.MessageBox.Show(reObj.Result.ExceptionMessage, "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return(null); } else { throw new Exception("Message: " + reObj.Result.ExceptionMessage + "\r\n" + "Stack: " + reObj.Result.ExceptionStack); } } else { Type relType = Type.GetType(reObj.Result.TypeQualifiedName); object relResult = null; if (relType.Name.ToLower() != "void") { relResult = JsonConvert.DeserializeObject(reObj.Result.JsonValue, relType); } return(relResult); } } finally { if (streamResponse != null) { streamResponse.Close(); } if (response != null) { response.Close(); } } }
public string RequestService <T>(RequestModel requestModel, List <String> lstTbName) { HttpWebResponse response = null; Stream streamResponse = null; try { MethodDC transDataClass = new MethodDC(); transDataClass.ApiConfigKey = requestModel.IServiceName; transDataClass.InterfaceName = requestModel.IServiceName; transDataClass.MethodName = requestModel.MethodName; transDataClass.TypeArguments = requestModel.Types; List <ParameterDC> webParamerList = new List <ParameterDC>(); foreach (object param in requestModel.ParameterList) { ParameterDC aWebParamer = new ParameterDC(); aWebParamer.TypeQualifiedName = param.GetType().AssemblyQualifiedName; aWebParamer.JsonValue = JsonConvert.SerializeObject(param); webParamerList.Add(aWebParamer); } transDataClass.ParameterList = webParamerList; if (lstTbName != null) { foreach (var strName in lstTbName) { foreach (var item in transDataClass.ParameterList) { if (item.TypeQualifiedName.Contains(strName)) { if (item.TypeQualifiedName.Contains(string.Format("HisPlus.Contract.Messages.{0}, HisPlus.Contract, Version=0.0.0.0,", strName))) { item.TypeQualifiedName = item.TypeQualifiedName.Replace(string.Format("HisPlus.Contract.Messages.{0}, HisPlus.Contract, Version=0.0.0.0,", strName), string.Format("Orm.Model.{0}, Orm.Model, Version=1.0.0.0,", strName.Replace("Dto", string.Empty))); } if (item.TypeQualifiedName.Contains(string.Format("HisPlus.Contract.Messages.Generated.{0}, HisPlus.Contract, Version=0.0.0.0,", strName))) { item.TypeQualifiedName = item.TypeQualifiedName.Replace(string.Format("HisPlus.Contract.Messages.Generated.{0}, HisPlus.Contract, Version=0.0.0.0,", strName), string.Format("Orm.Model.{0}, Orm.Model, Version=1.0.0.0,", strName.Replace("Dto", string.Empty))); } } } } } //将要传递的数据序列化成json格式 string jsonContract = JsonConvert.SerializeObject(transDataClass); //TODO:加密或压缩对jsonContract,密文可根据日期变化。服务端验证密文 MethodDC vdf = JsonConvert.DeserializeObject <MethodDC>(jsonContract); //将要传递的json转成byte[] byte[] PostData = Encoding.UTF8.GetBytes(jsonContract); var watch = new System.Diagnostics.Stopwatch(); watch.Start(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestModel.ApiUrl);//http://localhost:6848/Handler.api request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.GetRequestStream().Write(PostData, 0, PostData.Length); request.ContentType = "text/xml; charset=utf-8"; ServicePoint currentServicePoint = request.ServicePoint; currentServicePoint.ConnectionLimit = 1000; response = (HttpWebResponse)request.GetResponse(); streamResponse = response.GetResponseStream(); string strResponse = string.Empty; //如果服务端采用了GZIP压缩,则先解压缩。 if (response.ContentEncoding.ToLower().Contains("gzip")) { using (GZipStream gz = new GZipStream(streamResponse, CompressionMode.Decompress)) { using (StreamReader readerGzip = new StreamReader(gz, Encoding.UTF8)) { strResponse = readerGzip.ReadToEnd(); } } } else { using (StreamReader streamRead = new StreamReader(streamResponse, Encoding.UTF8)) { strResponse = streamRead.ReadToEnd(); } } //TODO:解密或解压缩对strResponse MethodDC reObj = JsonConvert.DeserializeObject <MethodDC>(strResponse); watch.Stop(); if (reObj.Result.HasException) { throw new Exception("Message: " + reObj.Result.ExceptionMessage + "\r\n" + "Stack: " + reObj.Result.ExceptionStack); } else { return(reObj.Result.JsonValue); } } finally { if (streamResponse != null) { streamResponse.Close(); } if (response != null) { response.Close(); } } }