我试图编写一个允许用户将文件上传到服务器的Web应用程序,然后将其保存在网络共享上(即X:\ TargetFolder)。首先是代码:
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"
当此代码在Kestrel或IIS Express中运行时,它按预期工作,但当该站点在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核心应用程序运行的应用程序池(名为.NetCore)配置为以ApplicationPoolIdentity运行。我已将IIS AppPool.NetCore用户的显式完全控制权限添加到此X:驱动器共享。我试图将App Pool用户切换到网络服务(并为其设置显式权限),但得到了同样的错误。我已将此共享指向本地文件夹,但仍然收到此错误,但是如果我将保存指向实际文件夹(即C:\ Users ... \ TargetFolder),则写入按预期工作。
我不知道还能在哪儿看!
答案 0 :(得分:1)
它适用于Kestrel和IIS Express,因为应用程序在用户会话的上下文中运行。
用户会话中映射的网络驱动器只能由该用户访问,而不能由运行IIS的任何服务帐户访问。
如果你使用UNC路径,你会看到它有效。