Exemple #1
0
 private SysPublic()
 {
     //client = new PHPRPC_Client("http://localhost/guodaxia/index.php/Admin/Api");
     //client = new PHPRPC_Client("http://test.meirixianguo.com/index.php/Admin/Api");
     client  = new PHPRPC_Client("http://www.meirixianguo.com/index.php/Admin/Api");
     service = (IService)client.UseService(typeof(IService));
 }
Exemple #2
0
 public static string RpcCall(string url, string method, Dictionary<string, string> args)
 {
     string result = string.Empty;
     try
     {
         PHPRPC_Client rpc = new PHPRPC_Client(url);
         IPhprpc p = (IPhprpc)rpc.UseService(typeof(IPhprpc));
         result = p.data(method, args);
     }
     catch(Exception ex)
     {
         string error = string.Format("Exception in RpcCall():{0}, url = {1}, method={2}, args={3}", ex.ToString(), url, method, args.ToString());
     }
     return result;
 }
Exemple #3
0
    protected void Button1_Click(object sender, EventArgs e)
    {
        PHPRPC_Client client = new PHPRPC_Client("http://10.3.11.99");
            this.Response.Write(PHPConvert.ToString(client.Invoke("Hi", new Object[] {"Ma Bingyao"})));

        recommend("product1324",10,"userid=-1");

        //int[] a = new int[10];
            //Random r = new Random();
            //for (int i = 0; i < 10; i++)
            //{
            //    a[i] = r.Next();
            //}
            //a = (int[])PHPConvert.ToArray(client.Invoke("Sort", new Object[] {a}), typeof(int[]));
            //for (int i = 0; i < 10; i++)
            //{
            //    Console.Write(a[i] + "\r\n");
            //}
            //Console.ReadLine();
    }
Exemple #4
0
    /// <summary>
    /// 根据传入的productid,userid来返回相关的推荐产品7位id有序列表
    /// </summary>
    /// <param name="productid">用户目前正在浏览的页面的产品7位id,不含尺寸</param>
    /// <param name="topn">设置返回推荐结果条数</param>
    /// <param name="userid">userid为-1表示不只使用productid来推荐</param>
    /// <returns></returns>
    private IList<string> recommend(string productid,int topn,string userid)
    {
        PHPRPC_Client client = new PHPRPC_Client("http://10.3.11.99");
        object result = client.Invoke("recommend", new Object[] {productid, topn,userid});
        AssocArray ht = PHPConvert.ToAssocArray(result);
        //this.Response.Write(ht.Count);

        foreach (int s in ht.Keys)
        {
            this.Response.Write(string.Format("{0}",s.ToString()));
        }
        this.Response.Write("<br/>");
        IList<string> tops=new List<string>();
        for(int i=0;i<ht.Count;i++)
        {
            string elem = PHPConvert.ToString(ht[i]);
            tops.Add(elem);
            this.Response.Write(string.Format("{0}<br/>", elem));
        }
        return tops;
    }
Exemple #5
0
        /// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public DataResult PullData(DataParameter parameter)
        {
            LogHelper.Debug(GetType(), "准备获取数据", LogInfo.ObjectToMessage(parameter));

            var success = true;
            var result  = new DataResult();
            var crchash = new CrcHash();

            PHPRPC_Client    client          = new PHPRPC_Client("http://localhost:4631/PullData.aspx");
            IPullDataService pullDataService = (IPullDataService)client.UseService(typeof(IPullDataService));

            //var pullDataService = AppCtx.Resolve<IPullDataService>("PullService");

            //初始化异常
            if (pullDataService == null)
            {
                LogHelper.Debug(GetType(), "获取接口失败");
                return(null);
            }


            #region 开始请求
            var beginParameter = new DataParameter();
            beginParameter.Action = parameter.Action;
            LogHelper.Debug(GetType(), "发送请求", LogInfo.ObjectToMessage(beginParameter));
            var beginDataInfo = pullDataService.Begin(beginParameter);
            if (beginDataInfo == null)
            {
                success             = false;
                result.ErrorId      = (int)DataDictionary.ErrorType.DataPullBeginError;
                result.ErrorMessage = "";
                return(result);
            }
            else
            {
                result.Action     = parameter.Action;
                result.SplitCount = beginDataInfo.SpliteCount;
            }
            #endregion


            #region 请求数据
            //初始化容器以收集字符串
            var sb = new StringBuilder(beginDataInfo.SpliteCount * dataLength);

            LogHelper.Debug(GetType(), "开始请求具体数据");
            for (int i = 0; i < beginDataInfo.SpliteCount; i++)
            {
                //请求数据
                //todo:需优化,以重新请求超时未能请求到的数据
                //var tcs = new TaskCompletionSource<DataSegment>();
                //WaitCallback asyncWork = _ =>
                //{
                var dataSegment = pullDataService.Pull(beginDataInfo.DataId, i);
                if (dataSegment == null)
                {
                    //tcs.SetResult(null);
                }
                else
                {
                    LogHelper.Debug(GetType(), string.Format("获取索引为{0}的数据:", i),
                                    LogInfo.ObjectToMessage(dataSegment));

                    var stream = StreamHeandler.StringToStream(dataSegment.DataString);
                    dataSegment = !crchash.Hash(stream, dataSegment.Crccode)
                                          ? null
                                          : dataSegment;
                }
                //        tcs.SetResult(dataSegment);
                //    }
                //};
                //ThreadPool.QueueUserWorkItem(asyncWork);
                //var task = tcs.Task;
                //var taskResult = task.Result;
                if (dataSegment != null)
                {
                    sb.Insert(i * dataLength, dataSegment.DataString);
                }
                else
                {
                    result.ErrorId      = (int)DataDictionary.ErrorType.DataPullError;
                    result.ErrorMessage = "";
                    success             = false;
                    break;
                }
            }
            #endregion

            #region 结束请求
            var endData = pullDataService.End(beginDataInfo.DataId, !success);
            LogHelper.Debug(GetType(), "结束请求数据", LogInfo.ObjectToMessage(endData));
            if (endData == null)
            {
                result.ErrorId      = (int)DataDictionary.ErrorType.DataPullEndError;
                result.ErrorMessage = "";
                success             = false;
            }
            #endregion

            if (success)
            {
                var stream = StreamHeandler.StringToStream(sb.ToString());
                var base64 = Base64Convert.FrmBase64(stream);
                LogHelper.Debug(GetType(), "解压请求到的数据");
                var unZipStream = ZipCompress.UnCompress(base64);
                result.CrcCode = crchash.GetHashCode(unZipStream);
                LogHelper.Debug(GetType(), "生成校验码", result.CrcCode);
                result.DataString = StreamHeandler.StreamToString(unZipStream);
                //返回
            }

            return(result);
        }
Exemple #6
0
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public DataResult PushData(DataParameter parameter)
        {
            LogHelper.Debug(GetType(), "准备发送数据", LogInfo.ObjectToMessage(parameter));


            PHPRPC_Client    client          = new PHPRPC_Client("http://localhost:4631/PullData.aspx");
            IPushDataService pushDataService = (IPushDataService)client.UseService(typeof(IPushDataService));

            //var pushDataService = AppCtx.Resolve<IPushDataService>("PushService");

            //初始化异常
            if (pushDataService == null)
            {
                LogHelper.Warn(GetType(), "获取接口失败");
                return(null);
            }

            var success       = true;
            var result        = new DataResult();
            var beginDataInfo = new DataInfo();
            var crchash       = new CrcHash();

            result.DataId     = Guid.NewGuid().ToString();
            result.Action     = parameter.Action;
            result.CrcCode    = parameter.CrcCode;
            result.DataString = parameter.DataString;

            var stream    = StreamHeandler.StringToStream(parameter.DataString);
            var zipStream = ZipCompress.Compress(stream);
            var base64    = Base64Convert.ToBase64(zipStream);
            var sb        = new StringBuilder(StreamHeandler.StreamToString(base64));
            var count     = (int)Math.Ceiling(sb.Length / (double)dataLength);

            result.SplitCount = count;

            #region 准备发送数据
            beginDataInfo.ActionId    = parameter.Action;
            beginDataInfo.DataId      = result.DataId;
            beginDataInfo.SpliteCount = count;

            LogHelper.Debug(GetType(), "开始请求发送数据", LogInfo.ObjectToMessage(beginDataInfo));
            pushDataService.Begin(beginDataInfo);
            #endregion

            #region 发送数据
            LogHelper.Debug(GetType(), "开始发送数据");
            for (int i = 0; i < count; i++)
            {
                var          tcs       = new TaskCompletionSource <bool>();
                WaitCallback asyncWork = _ =>
                {
                    var beginPos = i * dataLength;
                    var legth    = i == count - 1 ? sb.Length - beginPos : dataLength;
                    var data     = sb.ToString(beginPos, legth);

                    var dataSegment = new DataSegment();
                    dataSegment.DataId     = result.DataId;
                    dataSegment.Crccode    = crchash.GetHashCode(StreamHeandler.StringToStream(data));
                    dataSegment.DataString = data;
                    dataSegment.Index      = i;
                    LogHelper.Debug(GetType(), string.Format("发送数据,ID:{0},索引:{1}", result.DataId, i), LogInfo.ObjectToMessage(dataSegment));
                    pushDataService.Push(dataSegment);

                    tcs.SetResult(true);
                };
                ThreadPool.QueueUserWorkItem(asyncWork);

                var task       = tcs.Task;
                var taskResult = task.Result;
                if (!taskResult)
                {
                    success = false;
                    break;
                }
            }
            #endregion

            #region 发送完成
            var endResult = pushDataService.End(beginDataInfo.DataId, !success);
            LogHelper.Debug(GetType(), "发送数据完成");

            if (endResult == null)
            {
                success = false;
            }
            #endregion

            return(result);
        }
 public PHPRPC_InvocationHandler(PHPRPC_Client client)
 {
     this.client = client;
 }