public T EndInvoke <T>() { T retValue; var request = _trans.Request; var response = _trans.Response; if (response.ErrorCode != RpcErrorCode.OK) { throw new RpcException(response.ErrorCode, _trans.ServiceUrl, "RpcResponse Failed", response.Error); } if (typeof(T) == typeof(RpcNull) || _trans.Response.BodyBuffer == null) { retValue = default(T); } else { try { retValue = _trans.Response.BodyBuffer.GetValue <T>(); } catch (Exception ex) { byte[] buffer = _trans.Response.BodyBuffer.GetByteArray(); _observer.RequestTracer.WarnFmt2( ex, request.ServiceAtComputer, request.ContextUri, "ResponseBuffer byte[{0}] = {1}", buffer.Length, StrUtils.ToHexString(buffer, 500) ); throw new RpcException(RpcErrorCode.InvaildResponseArgs, _trans.ServiceUrl, "RpcClientContext.EndInvoke<T>, Failed", ex); } } TracingManager.Info( delegate() { _observer.ResponseTracer.InfoFmt2( request.FromService, request.ContextUri, "Args={0}\r\nResults={1}", ObjectHelper.DumpObject(request.BodyValue), ObjectHelper.DumpObject(response.BodyValue) ); } ); return(retValue); }
/// <summary> /// 获取请求参数 /// </summary> /// <typeparam name="T">请求参数类型</typeparam> /// <returns>请求参数</returns> public T GetArgs <T>() { try { T ret; if (_request.BodyBuffer == null) { object a = null; ret = (T)a; } else { ret = _trans.Request.BodyBuffer.GetValue <T>(); TracingManager.Info( delegate() { _observer.RequestTracer.InfoFmt2( _request.ServiceAtComputer, _request.ContextUri, "Args={0}", ObjectHelper.DumpObject(_trans.Request.BodyValue) ); } ); } return(ret); } catch (Exception ex) { byte[] buffer = _trans.Request.BodyBuffer.GetByteArray(); _observer.RequestTracer.ErrorFmt2( ex, _request.ServiceAtComputer, _request.ContextUri, "RequestBuffer byte[{0}] = {1}", buffer.Length, StrUtils.ToHexString(buffer, 500) ); throw new RpcException(RpcErrorCode.InvaildRequestArgs, _trans.ServiceUrl, "RpcServerContext.GetArgs(), Failed", ex); } }
/// <summary> /// 使用utf8编码将字符串散列 /// </summary> /// <param name="sourceString">要散列的字符串</param> /// <returns>散列后的字符串</returns> public static string HashString(string sourceString) { byte[] source = md5.ComputeHash(Encoding.UTF8.GetBytes(sourceString)); return(StrUtils.ToHexString(source)); }