/// <summary> /// 调用服务器端一个无返回值的函数 /// </summary> /// <param name="invoke">参数</param> protected void InvokeViaOneWay(WcfInvokeInfo invoke) { var p = System.Web.Helpers.Json.Encode(invoke); Process(p, buffer => { var service = GetService(); service.ProcessViaOneWay(buffer); return(null); }); }
private static void WriteException(WcfInvokeInfo invokeInfo, Exception ex) { var logWriter = LogWriterGetter.GetLogWriter(); if (logWriter != null) { for (int i = 0; i < invokeInfo.Parameters.Length; i++) { if (invokeInfo.Parameters[i] != null) { ex.Data.Add("[" + i + "]" + invokeInfo.Parameters[i].GetType().Name, "值:" + invokeInfo.Parameters[i]); } } logWriter.Write("Error", invokeInfo.MethodName, ex); } }
/// <summary> /// 调用服务器端一个函数,并返回一个值 /// </summary> /// <typeparam name="T">返回值类型</typeparam> /// <param name="invoke">参数</param> /// <returns>返回值</returns> protected T Invoke <T>(WcfInvokeInfo invoke) { var p = System.Web.Helpers.Json.Encode(invoke); p = Process(p, (buffer) => { var service = GetService(); return(service.Process(buffer)); }); var result = System.Web.Helpers.Json.Decode <WcfInvokeResult>(p); if (result != null) { if (!result.IsSuccess) { throw new WcfException(result.ErrorMessage); } return((T)result.Data); } return(default(T)); }
private static void WriteLog(WcfInvokeInfo invokeInfo, int time) { var logWriter = LogWriterGetter.GetLogWriter(); if (logWriter != null) { var sb = new StringBuilder(); if (invokeInfo != null) { sb.AppendLine("执行函数:" + invokeInfo.MethodName); foreach (var p in invokeInfo.Parameters) { if (p != null) { sb.AppendLine(string.Format(" 参数类型:{0};值:{1}", p.GetType().Name, p)); } } } logWriter.Write("Timeout\\Info-", invokeInfo.MethodName + "_" + time, LogType.Information, invokeInfo.MethodName + "_" + time, sb.ToString()); } }
private WcfInvokeResult DoWork(WcfInvokeInfo invokeInfo) { var rst = new WcfInvokeResult(); try { try { var start = DateTime.Now; if (string.IsNullOrWhiteSpace(invokeInfo.MethodName)) { throw new LogicException("传入函数名为空"); } var mi = GetType().GetMethod(invokeInfo.MethodName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); if (mi == null) { throw new LogicException("传入函数名不存在 - " + invokeInfo.MethodName); } var result = mi.Invoke(this, invokeInfo.Parameters); //所有被调用方法,必须返回WcfInvokeResult对象 var end = DateTime.Now; var span = end - start; if (span.Seconds >= 5) { WriteLog(invokeInfo, (int)span.TotalMilliseconds); } rst.IsSuccess = true; rst.Data = result; } catch (TargetInvocationException ex) { throw ex.InnerException; } catch (Exception ex) { WriteException(invokeInfo, ex); rst.ErrorMessage = ex.Message; rst.ErrorDetail = "调用函数异常 - " + invokeInfo.MethodName + " " + ex; } } catch (WcfException ex) { WriteException(invokeInfo, ex); rst.ErrorCategory = "WCF"; rst.ErrorMessage = ex.Message; rst.ErrorDetail = ex.ToString(); } catch (LogicException ex) // 逻辑错误,不需要写日志 { rst.ErrorCategory = "LOGIC"; rst.ErrorMessage = ex.Message; rst.ErrorDetail = ex.ToString(); } catch (AuthException ex) // 身份验证失败,不需要写日志 { rst.ErrorCategory = "AUTH"; rst.ErrorMessage = ex.Message; rst.ErrorDetail = ex.ToString(); } catch (Exception ex) { WriteException(invokeInfo, ex); rst.ErrorCategory = ex.GetType().FullName; rst.ErrorMessage = ex.Message; rst.ErrorDetail = "调用函数异常 - " + invokeInfo.MethodName + " " + ex; } return(rst); }