.....ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。

使用Microsoft.Office.Interop.Excel做一个Excel导入功能时,VS调时正常,但发布到IIS中却出现异常。

异常详细信息: System.UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}\ASPNET,在 IIS 6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。

解决办法:
经过各种搜索发现了几种被认为有效可行的方案
第一种思路(也是成功率最高的):
在IIS中的修改:应用程序池–>属性–>标识,改成LocalSystem
第二种思路:
修改要导入的文件的权限:Everyone/Network Service等用户的控制权限进行提升。

但是在下试了之后发现问题依旧存在,后发现异常中有这么一句话:
如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。
查看Web.config文件中system.web确实发现了identity impersonate="true"这个么配置。
再结合IIS应用程序池中的标识,最后发现:
若标识为ApplicationPoolIdentity,且上述<impersonate="true" />时,再给该配置指定用户名和密码(具体需要有什么权限我倒是没试,我试的用户具有完全控制权限),程序即可正常运行。这种方案可能还需要一些措施来保护写在配置文件中的用户名和密码。
若标识改为LocalSystem,impersonate就不能为true,否则依然权限不够,可以改为false或直接不要该节点了。这样问题也可以解决。当然对应现有系统如此很可能会改掉这个问题的时候再造成其它的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值