WebClient始终返回相同的内容

时间:2013-12-26 13:10:33

标签: c# php webclient

我已经建立了一个网站,我可以从中获取人们的随机引用。 当我通过浏览器浏览网站时,每次刷新都会得到不同的报价(应该如何)。

但是当我使用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>"; 
}

1 个答案:

答案 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'。