File.SaveAs停止工作:指定的网络名称不再可用

问题描述:

我一直在使用下面的代码保存文件到本地共享目录很长一段时间:File.SaveAs停止工作:指定的网络名称不再可用

file.SaveAs("\\localhost\MySharedDirectory\MySubDirectory\File.docx"); 

今天,它停止工作并开始抛出错误:The specified network name is no longer available.我不记得做任何改变我的项目或计算机,会导致这种情况发生。任何建议,我可以检查以再次得到这个工作?

排查详情

  • 我使用在IIS 7.5上运行的ASP.NET MVC网站上面的代码。我正在使用模拟,并且 证实模拟用户对共享 以及该目录具有(完全)权限。
  • SaveAs(...)文件路径字符串中,我试图用MyMachineName127.0.0.1替换localhost并继续收到相同的错误。
  • 在Windows资源管理器中,如果我右键单击该目录并进入Properties > Sharing,则共享的Network Path名称为: \\MyMachineName\MySharedDirectory。如果我直接在Windows资源管理器中导航到此路径,则会得到与我的代码产生的错误相同的错误。 但是,如果我在Windows资源管理器中导航到\\MyMachineName, 共享显示为MySharedDirectory正确,但尝试访问它会产生相同的错误。
  • 在Windows资源管理器中浏览\\MyMachineName时,我的其他几个股份 按预期显示,但当我尝试访问它们时,它们都会产生相同的错误。
  • 我没有运行防火墙或防病毒软件。
  • Windows Update最近没有运行或安装任何东西。

完全错误的详细

消息

The specified network name is no longer available. 

来源

mscorlib 

堆栈跟踪

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) 
    at System.IO.FileStream..ctor(String path, FileMode mode) 
    at System.Web.HttpPostedFile.SaveAs(String filename) 
    at System.Web.HttpPostedFileWrapper.SaveAs(String filename) 
    at ****.Web.Areas.Services.Controllers.****Controller.Submit1(****ViewModel model, Nullable`1 captchaValid, String action) in C:\Projects\****\****\Controllers\****Controller.cs:line 883 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 
+1

您是否重新启动计算机以查看是否修复了它? –

+0

是的,我已重新启动,但仍然收到错误消息。 – StronglyTyped

+0

“如果我直接在Windows资源管理器中导航到此路径,则会得到与我的代码产生的错误相同的错误”这听起来不像编程问题。 请参阅:http:// *。com/help/on-topic “这是一个实用的,可回答的问题,这是软件开发所特有的。”我会建议尝试使用不同的堆栈交换站点来解决网络名称首先不可用的问题。 – Jakotheshadows

我发现这使我想到,仔细检查该端口最近的网站,我在我的机器上添加了一个安全的一个使用事件查看器奇怪的Schannel错误。事实证明,事实并非如此。我在端口445上运行它,用于文件和打印机共享。我改变了端口,我可以再次访问这些共享。