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)); }
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; }
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(); }
/// <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; }
/// <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); }
/// <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; }