一、提交
1 public void PostData( string Data, string cUrl) 2 { 3 HttpWebRequest myReq = null; 4 HttpWebResponse response = null; 5 try 6 { 7 byte[] arrB = Encoding.UTF8.GetBytes(Data); 8 myReq = (HttpWebRequest)WebRequest.Create(cUrl); // 根据URL 创建对象 9 myReq.Method = " POST "; 10 myReq.ContentType = " application/x-www-form-urlencoded "; 11 myReq.ContentLength = arrB.Length; 12 Stream outStream = myReq.GetRequestStream(); 13 outStream.Write(arrB, 0, arrB.Length); 14 outStream.Close(); 15 16 response = (HttpWebResponse)myReq.GetResponse(); 17 HttpStatusCode status = response.StatusCode; 18 switch (status) 19 { 20 case HttpStatusCode.OK: // 返回状态码 200, 表示正常接收 21 tryTimes = 0; // 发送成功,将重试次数计数器清零 22 23 LogOrderSyncInfo(Data); // 向数据库中记录订单推送日志 24 25 Log.WriteCommonLog( " info ", " 推送数据成功! "); 26 break; 27 default: // 返回其他状态码,表示接收异常,需要重试3次 28 29 Thread.Sleep( 3000); // 失败后,过3秒后重试 30 31 if (tryTimes < 3) 32 { 33 tryTimes++; 34 Log.WriteCommonLog( " error ", " 推送数据出错!错误信息: " + status.ToString() + " 正在进行第: " + tryTimes.ToString() + 35 " 次重试 "); 36 PostData(Data, cUrl); 37 } 38 else if (tryTimes == 3) 39 { 40 tryTimes = 0; // 发送失败,将重试次数计数器清零 41 // 连续失败三次,则取消该订单推送 42 } 43 44 break; 45 } 46 } 47 catch (WebException ex) // 表示接收异常,需要重试3次 48 { 49 Thread.Sleep( 3000); // 失败后,过3秒后重试 50 51 if (tryTimes < 3) 52 { 53 tryTimes++; 54 Log.WriteCommonLog( " error ", " 推送数据出错!错误信息: " + ex.ToString() + " 正在进行第: " + tryTimes.ToString() + " 次重试 "); 55 PostData(Data, cUrl); 56 } 57 else if (tryTimes == 3) 58 { 59 tryTimes = 0; // 发送失败,将重试次数计数器清零 60 // 连续失败三次,则取消该推送 61 } 62 } 63 finally 64 { 65 if (myReq != null) 66 myReq.Abort(); 67 if (response != null) 68 response.Close(); 69 }
70 }
二、接收
数据接收方法比较简单,我这里用的是ASP.NET MVC
1 [AcceptVerbs(HttpVerbs.Post)] 2 public ActionResult Receive() 3 { 4 int result = 0; 5 string msg = string.Empty; 6 string cXml = string.Empty; 7 8 try 9 { 10 11 // 1.获取商户推送过来的订单发货数据 12 // 1.1 获取数据 13 StreamReader myStreamReader = new StreamReader((Stream) this.Request.InputStream); 14 cXml = myStreamReader.ReadToEnd(); 15 16 result = 1; // DataOperate(cXml); // 数据处理方法,返回处理结果 17 18 } 19 catch (Exception ex) 20 { 21 result = 0; 22 msg = " 出错,错误信息: " + ex.ToString(); 23 Log.WriteCommonLog( " error ", msg); 24 } 25 26 27 if (result > 0) 28 Response.StatusCode = 200; 29 else 30 Response.StatusCode = 404; 31 return View();
32 }