【问题标题】:Function for downloading and reading xml file from web stopped working suddenly从 web 下载和读取 xml 文件的功能突然停止工作
【发布时间】:2017-05-03 22:21:49
【问题描述】:

多年来,我一直使用这个确切的代码(如下)和现有的 ISP。我刚刚检查它是否有效 - 它不再允许我下载 xml 文件。尝试获取 Stream 对象时出现几个异常(如下所示)。如果我将相同的 URL 放入 Web 浏览器,提供相同的凭据,则可以正常下载 xml 文件。所以我不确定为什么它不再在这段代码中工作了。代码、凭证或 xml 文件中没有任何变化。用户名和密码没有改变。我什至尝试在代码的凭据中使用域名(尽管在网络浏览器中不需要)。

如果需要,下面的代码用于传递凭据 使用必要的凭据创建解析器。

XmlUrlResolver resolver = new XmlUrlResolver();
//try username with and without domain name     
// NetworkCredential nc = new NetworkCredential("userxyz@mydomain.com", "password1234");
NetworkCredential nc = new NetworkCredential("userxyz", "password1234");
resolver.Credentials = nc;
// Get a Stream object containing the XML file.
Uri updateXmlUrl = new Uri(UpdateCheckXmlFileUrl);
Stream Updatestream = (Stream)resolver.GetEntity(updateXmlUrl, null, typeof(Stream));
// Construct a reader using the Stream object.
XmlTextReader reader = new XmlTextReader(Updatestream);

获取流对象的异常错误

我什至尝试使用新凭据,但旧凭据可能会过期。

仍在使用 .net 4.5 (Visual Studio 2010)

Watch list on next line below

剩下的部分代码是解析读取的文件。

//然后假设从下面的阅读器读取XML代码

             reader.MoveToContent();
            string elementName = "";
            Version newVer = null;
            string url = "";
            string msiUrl = "";
            if (StopWorkerThread()) return;

            if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "appinfo"))
            {
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element) elementName = reader.Name;
                    else
                    {
                        if ((reader.NodeType == XmlNodeType.Text) && (reader.HasValue))
                        {

                            switch (elementName)
                            {
                                case "version":
                                    newVer = new Version(reader.Value);
                                    break;
                                case "url":
                                    url = reader.Value;
                                    break;
                                case "installer":
                                    msiUrl = reader.Value;
                                    break;
                                case "date":
                                    //elementName = elementName;
                                    break;
                            }
                        }
                    }
                }
            }

            // it gets to here and falls through to a false on the versioninfo.Error
            reader.Close();

            versionInfo.Error = false;
            versionInfo.LatestVersion = newVer;
            versionInfo.HomeUrl = url;
            versionInfo.InstallerUrl = msiUrl;

【问题讨论】:

  • 截图中的异常可能并不重要。这些是在调试器尝试读取对象的所有属性时生成的。但是,您可以看到该对象实际上已创建(并且您的指令指针已移至下一行)。当您尝试执行下一行 new XmlTextReader 时遇到什么错误?
  • 所以这段代码的想法是从网站上的xml文件中检查我在应用程序中运行的软件的当前版本号。如果获取不到xml文件,则直接关闭。
  • 我仍然不知道错误消息是什么,或者它出现在哪一行。没有这些信息,谁能提供帮助?!?!我们不是魔术师。
  • 我很确定问题出在 Stream Updatestream 行中,发生异常错误的地方。如果这不能正确解决,那么此后的一切都将不起作用,即 XmlTextReader 从 Updatestream 获取其数据。问题是我似乎无法深入研究 Stream Updatestream 以了解为什么会出现这些预期。
  • 我只是没有信息可以帮助你。想象一下,您将如何建议其他人仅使用此处的信息...

标签: c# xml


【解决方案1】:

事实证明,我切换到不同的托管站点,并且该功能正常工作。似乎对原始托管站点施加了一些新的安全措施,使其无法读取 xml 文件。奇怪的是,我可以使用带有网络浏览器的 http 下载,但不能使用此功能。在新的托管网站上,两者都可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2016-03-03
    相关资源
    最近更新 更多