2017-08-30 135 views
1

我正在尝试编写一个Web应用程序,允许用户将文件上载到服务器,然后将该文件保存在网络共享中(即X:\ TargetFolder)。首先这里是代码:.Net Core 2“DirectoryNotFoundException:找不到路径的一部分”

using (var fileStream = new FileStream(targetFile, FileMode.Create, FileAccess.Write, FileShare.None)) 
{ 
    var inputStream = file.OpenReadStream(); 
    await inputStream.CopyToAsync(fileStream, DefaultBufferSize, cancellationToken); 
} 

中的TargetFile变量的内容是:

"X:\\Intranet\\IN\\PartesTrabajo" 

当这个代码在红隼或IIS快速运行时,它正常工作,但是当该网站是在IIS 7.5上运行,我得到以下例外:

2017-08-30 14:51:05.742 -04:00 [Error] An unhandled exception has occurred while executing the request 
System.IO.DirectoryNotFoundException: Could not find a part of the path 'X:\Intranet\IN\PartesTrabajo\A1_7706_Copy of All Web Servers Batch 1.xlsx'. 
    at System.IO.FileStream.OpenHandle(FileMode mode, FileShare share, FileOptions options) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) 
    at Instrumentacion.Helpers.UtilityLibrary.<WriteFileInput>d__4.MoveNext() in C:\Users\kelly\Documents\Site Remediation\Remediated Sites\Barcelona\Instrumentacion\Helpers\FileHelpers.cs:line 42 

这显然是IIS相关的权限问题,但我无法弄清楚问题出在哪里。

我的.Net Core应用程序运行于(名为.NetCore)中的应用程序池被配置为以ApplicationPoolIdentity身份运行。我已经为IIS AppPool.NetCore用户添加了明确的完全控制权限,以便将此X:驱动器共享。我尝试将App Pool用户切换到Network Service(并为其设置显式权限),但得到了同样的错误。我已经将这个共享指向了一个本地文件夹,但是仍然得到这个错误,但是如果我将这个保存点指向实际文件夹(即C:\ Users ... \ TargetFolder),那么这些写入按预期工作。

我不确定在哪里看!

+1

尝试使用UNC路径而不是X:\作为映射驱动器X:仅在以交互方式以用户身份登录时才存在 – sly

回答

1

它在Kestrel和IIS Express中工作,因为应用程序在用户会话的上下文中运行。

映射到用户会话中的网络驱动器只能由该用户访问,而不能由运行IIS的任何服务帐户访问。

如果你使用UNC路径,你会看到这个工作。

+1

好悲伤。我知道我之前曾尝试过一次UNC份额,但是当它不起作用时,却放弃了这条路线。我一定是错误地输入了错误或者类似的东西。这次UNC路线工作。我应该知道这一点,不知道为什么之前没有注册。咄! – Kelly

相关问题