Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }
Ejemplo n.º 3
0
 /// <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));
 }