【问题标题】:IOException: The network name cannot be foundIOException:找不到网络名称
【发布时间】:2016-04-05 09:35:43
【问题描述】:

我运行一个用 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. 这种情况会在几周内发生一次。但是,当它发生时,我会在我的记录器中多次看到这个异常(每个异常之间有一秒钟的延迟)。

如您所见,此调用堆栈中的任何内容都不在我的代码中。因此,我不知道如何重现或解决此问题。

你建议我如何解决这个问题?任何提示都会有所帮助。

【问题讨论】:

  • 看起来配置文件中的某些内容指向网络路径。 SMB 路径有时会在几秒钟内不可用。用“//”标记所有内容。
  • 检查你的代码中你“投掷”的地方。很可能有人做了一个“抛出异常”,它会破坏你的堆栈跟踪。单独替换为“throw”,这至少应该让您获得完整的堆栈跟踪,以便在下次发生时使用。在此答案中找到有关“throw”与“throw ex”的信息:stackoverflow.com/questions/2728640/…
  • 你能分享你的 global.asax 代码吗?
  • 可能备份软件正在锁定文件。或者远程服务器重新启动,使其在一分钟左右不可用。
  • @user7396598 就我而言,这不是问题。它似乎是 ASP.Net 内部的一个进程,它抛出了错误,因此缺乏相关的堆栈跟踪。但我们仍然需要弄清楚它发生的原因以及我们如何预防它。

标签: c# asp.net asp.net-mvc ioexception


【解决方案1】:

source code,这个异常是框架自己触发的。

它会尝试枚举HttpRuntime.AppDomainAppPath 中的所有文件。看起来这条路径在您的场景中并不总是可用,这似乎有点奇怪。您在哪里托管文件?

我建议您记录HttpRuntime.AppDomainAppPath 的值并从那里搜索。我认为这将是一个相当不寻常的价值......

【讨论】:

  • 我们将应用托管在 Azure 应用服务上。我猜这可能是他们的虚拟机的一些内部问题。
  • 或者 Azure 网站正在像这个问题一样“进入睡眠状态”:stackoverflow.com/questions/33789895/…
  • @smoore4 这似乎不会导致文件路径不可用?
【解决方案2】:

网络可能已关闭,您可以通过简单地添加一个 catch 来捕获此异常并显示一条消息,指出网络名称的主机已关闭,它应该修复网络问题,然后再尝试您正在做的任何事情.

【讨论】:

  • 这应该在评论中
  • 不清楚。网络断了,我同意。但是,我找不到这个异常是从哪里抛出的。也许你知道如何定位这个有问题的代码?调用堆栈中没有提示。
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
相关资源
最近更新 更多