最近在Windows Server2008 IIS7上安装了我的Web应用程序(安装了Office)。如何在Windows 2008上做excel互操作?
追逐(&捕)其他各种错误后,我面临一个我不知道,甚至从哪里开始。
在卡西尼(视觉工作室开发服务器)上,一切工作完美无缺(通过excel interop阅读excel)。
在w2008 IIS它抛出模糊的错误:
Value cannot be null. Parameter name: o
[ArgumentNullException: Value cannot be null. Parameter name: o] System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Object o) +9430474 longnamespace.ExcelReader.Dispose() in c:\longpath\ExcelReader.cs:23 longnamespace.ApplicationFormReader.Read(String path) in c:\longpath\ApplicationFormReader.cs:32
目前,我要去加空检查,看看如果事情变得更好,但我怀疑这只是打击了之前部署在finally
块它甚至开始阅读任何东西。
试图设置应用程序池在localsystem下运行,但没有任何改变。
任何想法?
这方法如何处置看起来像
//http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects-in-c/159419#159419
public void Dispose(){
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(_ws); //Worksheet, line 23
_wb.Close();
Marshal.FinalReleaseComObject(_wb); //Workbook
_ap.Quit();
Marshal.FinalReleaseComObject(_ap); //Application
}
我相信如果是此事件相关
The machine-default permission settings do not grant Local Activation permission for the COM Server application with CLSID {00024500-0000-0000-C000-000000000046} to the user NT AUTHORITY\NETWORK SERVICE SID (S-1-5-20) from address LocalHost (Using LRPC). This security permission can be modified using the Component Services administrative tool.
- 任何人都可以翻译?
在组件服务添加适合Microsoft Excel Application
到Network service
不知何故没有工作。善良的。
删除身份验证级别也无济于事。
改为
if (_ws != null)
Marshal.FinalReleaseComObject(_ws);
if (_wb != null)
{
_wb.Close();
Marshal.FinalReleaseComObject(_wb);
}
if (_ap != null)
{
_ap.Quit();
Marshal.FinalReleaseComObject(_ap);
}
让我们来看看它是如何去...
奇怪的是 - 为什么它在IIS上部署之前从未为空? :/ – 2010-09-02 19:42:59
作为dcom设置中的标识切换到特定用户,并最终奏效。上帝,我累了... ...整天斗牛逼像这样的问题。该回家了。并感谢您的时间。 – 2010-09-02 19:49:13
“奇怪的是 - 为什么它在IIS上部署之前从未为空?” - 可能是因为未部署的其他代码在部署到IIS之前成功实例化_ap对象。 – Joe 2010-09-02 19:56:01