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