2012-10-31 50 views
2

我有一个MVC Web应用程序,它使用模板.xlt和.rpt生成Excel和PDF报告(使用Crystal),当我将模板放入时,它会生成没有小故障的报告Web服务器本身,但一旦我把模板在远程位置然后我得到一个访问被拒绝错误,我发现通过过程监控,屏幕截图如下访问在MVC Web应用程序的共享文件夹上被拒绝

enter image description here

当我手动浏览远程文件夹通过从服务器的资源管理器它的一切正常,我可以打开我所需要的文件,只是在访问被拒绝时发生错误e服务器读取文件。我的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 

UPDATE

我需要在这种情况下使用ApplicationPoolIdentity,所以我要寻找的是仍然可以使用ApplicationPoolIdent解决方案性。

另一个更新

我想下面@Davids建议,现在我得到同样的错误消息

System.Runtime.InteropServices.COMException(0x800A03EC):微软 Excel不能访问文件“ \ MyServer的\模板\ MyTemplate.xlt”。 有几种可能的原因:

?文件名或路径不存在。 •另一个程序正在使用该文件 。 ?试图保存的工作簿与当前打开的工作簿具有相同的 名称。在 Microsoft.Office.Interop.Excel.Workbooks.Open(字符串文件名,对象 UpdateLinks,只读对象,对象格式,对象口令,对象 WriteResPassword,对象IgnoreReadOnlyRecommended,对象产地, 对象分隔符,可编辑的对象,对象通知,目标转换器 对象AddToMru,对象本地,在 Ci.Infrastructure.Reporting.ReportProviderExcel.RunReport()

+0

你为什么不尝试冷杉映射远程位置的驱动器和第一给正确的用户权限。如果它是.net,它通常使用“网络服务”权限。 – user1785999

+0

如果我没有登录到Web服务器,它将不会映射到登录用户的上下文中,它将如何映射? – Raymund

+0

你有一个域,以便您可以使用NETWORKSERVICE访问该文件夹:http://www.iis.net/learn/manage/configuring-security/application-pool-identities – AFD

回答

2

对象CorruptLoad)我相信你的问题是因为应用程序池必须配置为运行或者作为域帐户或网络服务帐户。

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

你已经授予任何人访问,所以它应该只是改变应用程序池的用户的情况,但一旦你有工作,我建议你限制这种特定账户。

下面的链接会给你更多的信息:

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

+0

是啊,我使用ApplicationPoolIdentity,仍然有以上 – Raymund

+1

@Raymund这个问题,对不起,也许我没有让它太清楚,你需要从ApplicationPoolIdentity移开并使用任意一种网络服务或域帐户。 –

+0

这将是一个问题,因为我用的是ApplicationPoolIdentity来识别谁在使用内部网应用 – Raymund

相关问题