我已经建立了一个网站,我可以从中获取人们的随机引用。 当我通过浏览器浏览网站时,每次刷新都会得到不同的报价(应该如何)。
但是当我使用WebClient时,我总是得到相同的页面/引用。
有人可以解释一下吗?
try
{
WebClient wc = new WebClient();
wc.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
wc.DownloadStringAsync(new Uri("https://my.website.com"));
wc.DownloadStringCompleted += (s, e) =>
{
try
{
XElement erg = XElement.Parse(e.Result);
IEnumerable<XElement> r = erg.DescendantsAndSelf("value");
foreach (XElement sitem in r)
{
//I reset these vars before each call
_ID = Convert.ToInt16(sitem.Element("id").Value);
_upvotes = Convert.ToInt16(sitem.Element("upvotes").Value);
_downvotes = Convert.ToInt16(sitem.Element("downvotes").Value);
_composer = sitem.Element("composer").Value;
_content = sitem.Element("content").Value;
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.InnerException);
}
};
}
catch (Exception)
{ }
这是我网站上的PHP脚本
$res = $mysqli->query("
SELECT * FROM QUOTES
ORDER BY RAND()
LIMIT 1;");
while($z = $res->fetch_assoc())
{
echo "
<value>
<id>{$z['id']}</id>
<composer>{$z['composer']}</composer>
<content>{$z['content']}</content>
<upvotes>{$z['upvotes']}</upvotes>
<downvotes>{$z['downvotes']}</downvotes>
</value>";
}
答案 0 :(得分:0)
您的网站是否依赖Cookie(或会话等)来确定要显示的报价?
如果是这样,浏览器和webclient之间的区别在于浏览器接受cookie,而对于WebClient,每次访问都是第一次访问。
修改强>
在您发布网站脚本后,我认为问题可能是因为SQL Server正在缓存查询并为每个调用返回相同的结果集。一种补救方法可能是从服务器获取大量引号,然后使用脚本中的随机函数从中选择一个。
编辑2:
如果您具有QUOTES表的设计权限,则可以向表中添加DISPLAYED列。然后将您的查询修改为:SELECT * FROM QUOTES WHERE DISPLAYED&lt;&gt;'Y'ORDER BY ....
获取引号后,您更新它并将其DISPLAYED列设置为“Y”。同样,由于我不知道你的QUOTES表结构,你将弄清楚如何做到这一点。
如果DISPLAYED&lt;&gt;'Y'没有引号,则必须将所有记录的DISPLAYED列重置为'N'。