0
我已经使用了这个确切的代码(下面)很多年,并与现有的ISP。我只是检查它是否工作 - 它不再允许我下载xml文件。试图获取Stream对象时会出现一些异常(如下所示)。如果我将相同的URL放入Web浏览器,请提供相同的凭据,它可以很好地下载xml文件。所以我不确定它为什么不能在这个代码中工作了。代码或证书或xml文件中没有任何更改。用户名和密码没有改变。我甚至尝试在代码中的证书中使用域名(尽管在浏览器中不需要)。从网上下载和读取xml文件的功能突然停止工作
如果询问 ,则通过凭据的代码如下:创建具有必要凭据的解析器。
XmlUrlResolver resolver = new XmlUrlResolver();
//try username with and without domain name
// NetworkCredential nc = new NetworkCredential("[email protected]", "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中)
代码的其余部分是解析读取该文件。
//那么它想阅读以下
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”时,得到的错误是什么? – ErikE
所以这个代码的想法是从网站上的xml文件中检查我在应用程序中运行的软件的当前版本号。如果它无法获取xml文件,那么它会关闭。 – user3044638
我仍然不知道错误信息是什么,或者它出现在哪一行。没有这些信息,谁能提供帮助?!?!我们不是魔术师。 – ErikE