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 mayFullPath)at System.IO.FileStream.Init(String path、 FileModeモード、FileAccessアクセス、Int32権限、ブールuseRights、FileShare共有、Int32 bufferSize、FileOptionsオプション、SECURITY_ATTRIBUTES secAttrs、String msgPath、ブールbFromProxy、ブールuseLongPath)at System.IO.FileStream..ctor(文字列パス、FileModeモード、FileAccessアクセス、FileShare共有、Int32 bufferSize)at System.Xml.XmlDownloadManager.GetStream(Uri uri、ICredentialscredentials、IWebProxy proxy、RequestCachePolicy cachePolicy)at System.Xml.XmlUrlResolver.GetEntity(Uri AbsoluteUri、String role、Type ofObjectToReturn)atSystem。 Xml。XmlReaderSettings.CreateReader(String inputUri、XmlParserContext inputContext)at System.Xml.XmlReader.Create(String inputUri、XmlReaderSettings settings、XmlParserContext inputContext)at System.Xml.Linq.XDocument.Load(String uri、LoadOptions options)atSystem.Xml。 Linq.XDocument.Load(String uri)
StatTick.Controls.ChartSlider.getXMLFile(String url)のremoveedpath \ StatTick \ Controls \ ChartSlider.ascx.cs:line 27のStatTick.Controls.ChartSlider.Page_Load(Object sender、EventArgs e)のremovedpath \ StatTick \ Controls \ ChartSlider .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;
}
うまくいけば、誰かが私のためにこの問題への洞察を提供することができるでしょう。
ありがとう
編集 OKこれが私がやったことです。もうスローされないことを確認するためにいくつかのテストを行う必要があります。迅速な対応に感謝します!:
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;
}
}