使用 XDocument.Load() 从 XML 文件读取的 ASPX.NET 应用程序。有时它会抛出一个 IOException 静态文件,表明该文件无法打开,因为它正在被另一个进程使用。我无法通过打开文件并重新加载站点来随意重新创建它。但更奇怪的是,异常发生在我明确捕获 System.IOException 的 Try-Catch 块中。
这是堆栈:
异常类型:IOException
线程信息:线程 ID:18 线程帐户名称:NT AUTHORITY\NETWORK SERVICE 正在模拟:False 堆栈跟踪:在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode 模式、FileAccess 访问、Int32 权限、Boolean useRights、FileShare 共享、Int32 bufferSize、FileOptions 选项、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess访问,FileShare 共享,Int32 bufferSize) 在 System.Xml.XmlDownloadManager.GetStream(Uri uri,ICredentials 凭据,IWebProxy 代理,RequestCachePolicy cachePolicy) 在 System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri,字符串角色,Type ofObjectToReturn) 在系统。 xml。XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext) 在 System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings, XmlParserContext inputContext) 在 System.Xml.Linq.XDocument.Load(String uri, LoadOptions options) 在 System.Xml。 Linq.XDocument.Load(字符串 uri)
StatTick.Controls.ChartSlider.getXMLFile(String url) in removedpath\StatTick\Controls\ChartSlider.ascx.cs: StatTick.Controls.ChartSlider.Page_Load(Object sender, EventArgs e) in removedpath\StatTick\Controls\ChartSlider 中的第 27 行.ascx.cs:第 21 行
这是代码:
private XDocument getXMLFile(string url)
{
XDocument tempDoc;
t("Looking For XML File");
int tryCount = 0;
//string URL = "~/tempCharts/imageList.xml";
while (tryCount++ < 10)
{
try
{
tempDoc = XDocument.Load(Server.MapPath(url));
return tempDoc;
}
catch (IOException)
{
t("Error accessing XML File, sleeping for 10ms and then trying again\r\nTryCount: " + tryCount.ToString());
Thread.Sleep(10);
continue;
}
}
return null;
}
希望有人能够为我提供有关此问题的一些见解。
谢谢
编辑 好的,这就是我所做的,我将不得不做一些测试以验证它不再抛出感谢您的快速回复!:
while (tryCount <= 10)
{
try
{
using (FileStream fStream = new FileStream(Server.MapPath(url), FileMode.Open, FileAccess.Read, FileShare.Read))
{
XDocument xDoc = XDocument.Load(fStream);
foreach (XElement xe in xDoc.Descendants("ImageUrl"))
{
t("Added: " + xe.Value);
tempImageUrlList.Add(xe.Value);
}
t("Done with Image List!");
}
return tempImageUrlList;
}
catch (Exception)
{
t("Error access XML File, sleeping for 10ms and then trying again\r\nTryCount: " + tryCount.ToString());
Thread.Sleep(10);
continue;
}
}