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

ibliveicando 2013-05-06 03:02:35
问题还原:
我做一个商品发布的,由于商品信息是调用的第三方接口,由于第三方接口半个小时只能请求一次,
我们采用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
...全文
671 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ibliveicando 2013-05-07
  • 打赏
  • 举报
回复
。。。。怎么没人啊,求哪位大神解惑下
踏平扶桑 2013-05-07
  • 打赏
  • 举报
回复
你这是超时了吧? 看看是IIS超时还是数据库超时

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧