Visual Studio本地IIS和Express IIS的区别

4

我正在尝试使用microsoft.office.interop.excel创建xlsx文件。

当我在VS中使用IIS express运行Web应用程序时,它可以完美地工作,但是当我在本地IIS中使用VS运行时,我会收到以下错误:

{"Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))."}

我在我的服务器上也遇到了同样的异常,服务器版本:windows server 2016, IIS版本:10.0.14393.0

注意:DCOMC配置包含Microsoft Excel Application。


2
IIS Express与IIS在工作方式上存在细微差异。由于开发需求,IIS Express在安全方面更加宽松。您可以在VS配置中切换到使用完整的IIS(针对Web项目),然后检查是否正常工作。如果不行,请尝试以管理员身份运行VS,如果仍然无法解决问题,则检查您的IIS配置。希望这能有所帮助。 - Toni Kostelac
Microsoft Interop的东西不喜欢以系统用户身份运行。这使得与Microsoft交互的服务运行变得痛苦,而IIS也可能尝试以系统用户身份运行它。 - TheEvilMetal
服务器端的 Office 自动化注定要失败。此外,微软不支持其他一些技术,详见 https://blog.lextudio.com/the-most-common-technologies-not-supported-by-microsoft-8675c409bde2。 - Lex Li
兄弟,不要关闭一个问题并发布你博客的链接作为真相。这样做是不正确的,也不会让你的回答更有权威性。 - User.Anonymous
1个回答

2
当您执行IIS Express时,池使用您的Windows帐户,该帐户具有访问和启动Excel的权限。
默认情况下,本地IIS使用ApplicationPoolIdentity,因此如果您想执行外部程序集,则最好的方法是将池的身份更改为您的Windows帐户(或为此使用创建的帐户)。 enter image description here

尽管这个答案解释了为什么应用程序在IIS Express上工作,但它建议更改IIS配置是无意义的。微软根本不支持服务器端Office自动化。 - Lex Li
我几年前曾经使用过这个COM。也许现在不可能了,但是在.Net2.0上是可以的。这不是一个好的实践,因为每次调用都会启动一个excel.exe进程。当上下文消失时,应该处理掉该进程。这个解决方案也存在很多内存泄漏问题。 - User.Anonymous
感谢所有回复者。我通过使用EPPlus构建新函数解决了它。 - nel siboni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接