IOException: 网络名称无法找到

7

我已经运行了一段时间使用C#编写的C# MVC网站。最近,我在我的日志记录数据中注意到了这条日志信息:

System.IO.IOException: The network name cannot be found.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileSystemEnumerableIterator`1.CommonInit()
   at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
   at System.IO.Directory.EnumerateFiles(String path)
   at System.Web.WebPages.Deployment.WebPagesDeployment.AppRootContainsWebPagesFile(String path)
   at System.Web.WebPages.Deployment.PreApplicationStartCode.OnChanged(String key, Object value, CacheItemRemovedReason reason)
   at System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(CacheItemRemovedCallback callback, CacheItemRemovedReason reason)

我了解到:
1. 这个异常被抛出来自于 ASP.global_asax 文件。 2. 这种情况每隔几周才会发生。但是,当它发生时,我在我的记录器中看到这个异常几次 (每个异常之间有一秒钟的延迟)。 3. 如您所见,调用栈中没有我的代码。因此,我不知道如何复现或解决这个问题。
你有什么建议可以帮助我解决这个问题吗?任何提示都将是有帮助的。

看起来配置文件中有东西指向了网络路径。SMB路径有时会在几秒钟内不可用。使用“//”搜索所有内容。 - usr
检查你的代码中是否有使用 "throw" 的地方。很可能有人使用了 "throw exception",这会破坏你的堆栈跟踪。将其替换为单独的 "throw",下一次发生时,至少可以得到完整的堆栈跟踪信息。关于 "throw" 和 "throw ex" 的信息可以在此答案中找到:https://dev59.com/9nE85IYBdhLWcg3wikAu - user7396598
你能分享一下你的 global.asax 代码吗? - Nagaraj Raveendran
2
可能是备份软件锁定了文件。或者远程服务器正在重新启动,导致一两分钟内无法使用。 - VDWWD
在我的情况下,这不是问题所在。似乎是ASP.Net内部的一个进程引发了错误,因此缺少相关的堆栈跟踪。但我们仍然需要弄清楚为什么会出现这种情况以及如何防止它。 - Josh Noe
我同意VDWWD的观点,VMware备份可能会导致IO错误。 - smoore4
2个回答

3
看一下源代码,这个异常是由框架本身触发的。
它试图枚举HttpRuntime.AppDomainAppPath中的所有文件。在您的情况下,这个路径似乎并不总是可用,这看起来有点奇怪。您的文件托管在哪里?
我建议您记录HttpRuntime.AppDomainAppPath的值并从那里搜索。我认为这将是一个相当不寻常的值...

1
我们正在 Azure App 服务上托管应用程序。我猜可能是他们的虚拟机出了些内部问题。 - Josh Noe
或者 Azure 网站正在像这个问题所描述的那样“进入休眠状态”:https://dev59.com/ZFsX5IYBdhLWcg3wd_TS - smoore4
@smoore4 这似乎不会导致文件路径不可用? - Josh Noe

-4

网络可能已经断开,您可以通过添加一个catch来捕获此异常并显示一个消息,指出网络名称的主机已经宕机,并在再次尝试操作之前修复网络问题。


1
this should be in comment - Usman Maqbool
2
不太清楚。网络出了问题,我同意。但是,我无法找到这个异常从哪里抛出。也许你知道如何定位这个有问题的代码?调用堆栈中没有提示。 - No1Lives4Ever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接