我试图创建一个使用互操作库的Excel文件,但下面是我得到的错误:使用互操作库Web服务器端的Excel创建
Creating an instance of the COM component with CLSID {00024500-0000-0000-
C000-000000000046} from the IClassFactory failed due to the following error: 8001010a
The message filter indicated that the application is busy.
(Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)).
我看着很多资源,在那里上了网,其广泛地可分为以下:
- 互操作库是专门为桌面应用程序构建,以及在服务器端网络应用程序使用它们如WCF是highly not recommended。
- 与交互式用户或DefaultAppPool相关的权限问题。
等等等等。
那么,这里的警告,我不能改变服务器端的应用程序,一切工作在其他地方。几天前,Office 2016从我的机器上被推到我的机器上,并且在我的本地机器上停止工作(出现以上错误)。现在我不能去改变一个遗留代码,但看看我是否可以解决我的本地问题以进一步开发。
下面是我做什么,请注意一切工作本机(当Office 2013在那里)上:
- 拿到办公室2016卸载,然后重新安装Office 2013,同样的问题,因此又恢复到办公室2016.目前MS-Office 2016 32位已安装。
Microsoft Excel Application
安全选项卡的各个部分验证的权限已添加IIS AppPool \ DefaultAppPool用户,IIS_IUSRS,具有完全控制权限的交互式用户(不应该错误为“访问被拒绝”,权限已被错误?)- 创建一个新的示例web应用程序,以快速调试,运行它的所有组合的CPU平台,即x86,AnyCpu,x64 - 同样的问题。
- 有趣的是,它工作如果我的示例应用程序指向IIS Express而不是本地IIS。
- 增加了最新的版本互操作程序集用(安装,包装的Microsoft.Office.Interop.Excel -Version 15.0.4795.1000) - 还是同样的问题
- 新增的Microsoft Office 16.0对象库(2.8)到项目 - 仍然相同问题
这是一个古老的问题及其可能更好地逃脱互操作,但我想知道什么可能会错误的 - 所有的上述建议实施IMessageFilter
或什么不是错误的直接结果,但我不能更改服务器端代码,下面的代码应该像前几天一样工作:
Microsoft.Office.Interop.Excel.Application l_ExcelApp =
new Microsoft.Office.Interop.Excel.Application();
但它没有,所以改变了?可能出了什么问题?
此外,如果它有帮助--dcomcnfg(/ 32)中列出的ApplicationID是:00020812-0000-0000-C000-000000000046}
,但错误有一个不同。
去哪里看?我希望这个问题的答案可以引导失去的灵魂永远关于这个问题。
实际上,您确实很幸运,以前所有工作都没有任何问题......作为Microsoft支持页面的链接,您已经声明:Microsoft Interop在服务器端环境中不受Microsoft支持,因为它可以导致许多不同类型的问题。所以你真正能做的唯一事情就是:摆脱Office Interop部分,并替换它(例如用'OpenXML'或类似的库)。我不认为试图找出任何原因是值得的,因为整个构造非常“脆弱”(并且可能会随着即将到来的Office更新再次破裂)。 – bassfader