Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebClient始终返回相同的内容_C#_Php_Webclient - Fatal编程技术网

C# WebClient始终返回相同的内容

C# WebClient始终返回相同的内容,c#,php,webclient,C#,Php,Webclient,我已经建立了一个网站,从中我可以获取人们的随机报价。 当我通过浏览器浏览网站时,每次刷新都会得到不同的报价(应该是怎样的) 但是当我使用WebClient时,我总是得到相同的页面/引用 有人能解释一下吗 try { WebClient wc = new WebClient(); wc.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1"); wc.DownloadStringAsync(new Uri("http

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

但是当我使用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)
{ }
试试看
{
WebClient wc=新的WebClient();
wc.Encoding=System.Text.Encoding.GetEncoding(“ISO-8859-1”);
wc.DownloadStringAsync(新Uri(“https://my.website.com"));
wc.DownloadStringCompleted+=(s,e)=>
{
尝试
{
XElement erg=XElement.Parse(e.Result);
IEnumerable r=erg.后代和自身(“值”);
foreach(右侧的XElement站点)
{
//每次通话前我都会重置这些变量
_ID=转换为16(站点元素(“ID”).值);
_UPVOLUES=转换为16(站点元素(“UPVOLUES”).值);
_向下投票=转换为16(站点元素(“向下投票”).值);
_composer=sitem.Element(“composer”).Value;
_内容=站点元素(“内容”).值;
}
}
捕获(例外情况除外)
{
Debug.WriteLine(例如InnerException);
}
};
}
捕获(例外)
{ }
这是我网站上的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>"; 
}
$res=$mysqli->query(“
从引号中选择*
兰德订单()
限额1;“”;
而($z=$res->fetch_assoc())
{
回声“
{$z['id']}
{$z['composer']}
{$z['content']}
{$z['upvows']}
{$z['downvoates']}
"; 
}

您的网站是否依赖cookies(或会话等)来确定要显示的报价

如果是这样,那么浏览器和webclient之间的区别在于浏览器接受cookies,而对于webclient,每次访问都与第一次一样

编辑:

在您发布web站点脚本之后,我认为问题可能是因为SQL Server正在缓存查询并为每个调用返回相同的结果集。补救方法可能是从服务器获取大量引号,然后使用脚本中的随机函数从中选择一个

编辑2:

如果您对QUOTES表具有设计权限,则可以向表中添加显示的列。然后,您将查询修改为:从显示“Y”ORDER BY的引号中选择*

获取报价后,更新报价并将其显示列设置为“Y”。再说一次,因为我不知道引号表的结构,所以您必须知道如何做到这一点


如果没有显示为“Y”的引号,则必须将所有记录的显示列重置为“N”。

否,无Cookie。只是SQL。当我第一次使用WebClient时,它会随机显示。从那时起,每当我刷新时,我都会得到相同的结果。我认为你应该发布网页的代码以及你的webclient代码,以便人们更好地分析这种行为哪种语言是脚本?您可能希望将该标记添加到问题中。我还编辑了我的答案,看一看,我最终得到了大约300条引语,并以这种方式进行了分析。但是仍然没有完美的解决方案。您可以尝试禁用请求缓存:
RequestCachePolicy policy=newrequestcachepolicy(RequestCacheLevel.NoCacheNoStore);WebClient wc=新的WebClient();wc.CachePolicy=策略。。。