从MVC Web应用程序访问共享文件夹上的访问权限

时间:2012-10-31 22:18:02

标签: c# asp.net-mvc excel iis file-io

我有一个MVC Web应用程序,使用模板.xlt和.rpt生成Excel和PDF报告(使用Crystal),当我将模板放入Web服务器本身但是放置模板后,它会生成报告而不会出现故障在远程位置然后我收到一个拒绝访问错误,我通过进程监视器找到了错误,屏幕截图如下

enter image description here

当我从服务器通过资源管理器手动浏览远程文件夹时,一切正常,我可以打开我需要的文件,当服务器读取文件时,它只会触发拒绝访问错误。我的Web应用程序正在使用Integrated Pipeline中的ApplicationPoolIdentity。身份验证是通过模拟和Windows身份验证进行的。甚至让人感到困惑的是,运行Excel模板的用户是我自己,但我拒绝访问,而用于生成PDF的用户是IIS Apppool。

有没有人知道如何解决访问被拒绝的问题,我已经尝试将所有用户完全访问该文件夹但仍然无效。

附加信息

我正在使用IIS 7.5,我还检查了共享所在的文件服务器,在事件日志中,用户注册的不是我,而是具有以下详细信息

An account was successfully logged on.

Subject:
    Security ID:        NULL SID
    Account Name:       -
    Account Domain:     -
    Logon ID:       0x0

Logon Type:         3

New Logon:
    Security ID:        ANONYMOUS LOGON
    Account Name:       ANONYMOUS LOGON
    Account Domain:     NT AUTHORITY
    Logon ID:       0x90eb7c7
    Logon GUID:     {00000000-0000-0000-0000-000000000000}

Process Information:
    Process ID:     0x0
    Process Name:       -

Network Information:
    Workstation Name:   MYWEBSERVER
    Source Network Address: 10.10.10.01
    Source Port:        00000

Detailed Authentication Information:
    Logon Process:      NtLmSsp 
    Authentication Package: NTLM
    Transited Services: -
    Package Name (NTLM only):   NTLM V1
    Key Length:     128

更新

我需要在这个实例中使用ApplicationPoolIdentity,所以我正在寻找一个仍然可以使用ApplicationPoolIdentity的解决方案。

另一个更新

我在下面尝试了@Davids建议,现在我收到了相同的错误消息

  

System.Runtime.InteropServices.COMException(0x800A03EC):Microsoft   Excel无法访问文件'\ MyServer \ Templates \ MyTemplate.xlt'。   有几个可能的原因:

     

•文件名或路径不存在。 •文件正在使用   另一个程序。 •您尝试保存的工作簿具有相同的功能   将name命名为当前打开的工作簿。在   Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename,Object   UpdateLinks,Object ReadOnly,Object Format,Object Password,Object   WriteResPassword,Object IgnoreReadOnlyRecommended,Object Origin,   对象分隔符,对象可编辑,对象通知,对象转换器,   Object AddToMru,Object Local,Object CorruptLoad)at   Ci.Infrastructure.Reporting.ReportProviderExcel.RunReport()

1 个答案:

答案 0 :(得分:2)

我认为您的问题是因为应用程序池需要配置为以域帐户或网络服务帐户运行。

如果选择后者,如果您选择以特定帐户身份运行,则需要向'<domainname>\<machinename>$'授予权限,然后这是您需要授予权限的用户。

您已经授予所有人访问权限,因此它应该只是更改应用程序池用户的情况,但是一旦您使用它,我建议您将其限制为特定帐户。

以下链接将为您提供更多信息:

http://www.iis.net/learn/manage/configuring-security/application-pool-identities