双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

求大神解决关于http请求数据过多超时问题

ibliveicando ibliveicando 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题还原:
我做一个商品发布的,由于商品信息是调用的第三方接口,由于第三方接口半个小时只能请求一次,
我们采用1次性把所有商品信息全部请求过来(返回的数据非常大,大概有5、6千条数据,是xml格式),
然后放到缓存中进行处理,一般情况,都没有问题。

但最近第三方接口商品信息更换频繁。造成我们这边发布商品时,
可能第三方这边已经下架了(由于一般情况我们是从缓存中读取的数据)。
所以,我这边又开发一清除缓存重新加载的功能。
但我这边请求第三方数据的时候,会提示“查询产品价格失败”,已经超时。
请问怎么解决。

下面我贴出来,我写的相关的代码和日志记录。
代码:

/// <summary>
/// 查询商品列表(无缓存操作)
/// 2013.4.24 -by 嘿嘿
/// </summary>
/// <param name="categoryname">产品类别名称</param>
/// <param name="lst">返回全部的商品信息列表</param>
/// <returns></returns>
public bool GetProductListClearCache()
{
string param = this.GetParam("");
string url = this._queryProduct + param;
string result = this.GetHttpRequest(url);//请求数据
GameTradingByPublic.PublicMethods.GetLogManager.Debug(result);//记录日志
List<ReturnType.GoodsInfo> lst = new List<ReturnType.GoodsInfo>();
GameTradingByPublic.ICached cached = GameTradingByPublic.CacheManager.GetMemCached();
if (!string.IsNullOrEmpty(result) && result.IndexOf("ret_code") < 0)//把请求的数据放到list数组中
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(result);
System.Xml.XmlNodeList nodelst = doc.GetElementsByTagName("ProductItem");

for (int i = 0; i < nodelst.Count; i++)
lst.Add(this.ConvertObj<ReturnType.GoodsInfo>(nodelst[i]));
}
if (lst != null && lst.Count > 0)//判断请求数据是否成功
{
object obj = cached.GetValue("JCardRecharge_Recharge_GetProductList");
if (obj != null)
{
//清除旧缓存
cached.DeleteValue("JCardRecharge_Recharge_GetProductList");
}
//增加新缓存
cached.PutValue("JCardRecharge_Recharge_GetProductList", lst, 24 * 60 * 60);
return true;
}
return false;
}


/// <summary>
/// 模拟Http请求
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
String GetHttpRequest(string url)
{
if (string.IsNullOrEmpty(url))
return string.Empty;
System.Net.HttpWebRequest request = System.Net.WebRequest.Create(url) as System.Net.HttpWebRequest;
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.MaximumAutomaticRedirections = 1;
request.AllowAutoRedirect = false;
request.Timeout = 1024 * 16;
request.ContentLength = url.Length;
request.ServicePoint.Expect100Continue = false;
System.IO.StreamReader stream = null;
string responseValue = string.Empty;
try
{
stream = new System.IO.StreamReader(request.GetResponse().GetResponseStream(),Encoding.GetEncoding("gb2312"),true,102400);

//stream.Read(StreamToBytes(request.GetResponse().GetResponseStream()), 0, 1000);
responseValue = stream.ReadToEnd();
}
catch
{
responseValue = string.Empty; ;
}
finally
{
request.GetResponse().GetResponseStream().Close();
stream.Close();
stream = null;
}
return responseValue;
}


日志记录:
---- 记录时间:2013-05-06 13:34:38,658 线程ID:[141] 出错类:WebLogger property:[(null)] 用户Ip:211.100.58.250
服务器Ip:192.168.0.106
客户端信息:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1496.0 Safari/537.36
错误描述:ret_code=-1&ret_msg=查询产品价格失败,原因:超时时间已到。在操作完成之前超时时间已过或服务器未响应。&sign=2948b5137851eb3b85e27200b9afebd4
...全文

相关推荐

PHP http请求超时问题解决方案

一,http请求超时时间 可能出现的场景: 1,curl进程运行了一个世纪还木结束,curl的时候设置了超时时间 –connect-timeout 1000 2,operation timed out after 1000 milliseconds with 0 bytes received 3,connect() timed out! wget对超时时间, 是有分阶段的, 比如说请求的超时, 传输的超时,同样HTTP请求有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间,出现问题就要看是哪个超时时间出问题了。 curl命令行 连接超时时间用 –connect-timeout

weixin_38624914

axios请求超时设置重新请求的完美解决方法

axios请求超时,设置重新请求的完美解决方法

weixin_39841882

Http请求长时间等待无结果返回解决办法

Http请求长时间等待无结果返回解决办法 今天遇到一个奇葩的问题,这个程序主要是用于调用接口搜集数据的,但是,发生了不好的事情就是服务器中启动的进程非常多,一直无法结束,没办法只能采用kill的方法,将所有的这部分进程杀掉。 分析了下程序,写了个测试,本地跑依旧长时间等待,无法运行,也不抛出异常,最后发现问题在于发送请求的部分,一直在等待对方服务器响应,由于采用的是keep-alive方式的连接,这里没有采用超时的方式,以至于程序会长时间等待下去。 经过测试发现开启进程过多在于没有设置超时,希望读者注意这部分,否则,容易出现笔者遇到的这种问题。最终的问题应该是接口提供方的异常导致。

weixin_38547882

Go中http超时问题的排查及解决方法

主要介绍了Go中http超时问题的排查及解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

weixin_38710557

Java Http请求传json数据乱码问题的解决

主要介绍了Java Http请求传json数据乱码问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38652058
评论 2
收藏 已收藏
分享
返回顶部
ibliveicando
.NET社区 62,274 成员 668,968 内容