关于含生成Word文档的Asp.net网站发布问题

xfreyes 2011-06-09 10:30:05
直奔主题了,
我做了一个Asp.net网站,其中包含一个word文档的生成功能,我使用的是office自带的Microsoft.Office.Interop.Word来生成的,本地测试无问题,发布到服务器之后就有问题了。


报错:
System.Web.HttpUnhandledException: 引发类型为“System.Web.HttpUnhandledException”的异常。 ---> System.Runtime.InteropServices.COMException (0x8000401A): 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a。

服务器系统为Windows Server Enterprise 2007 sp1 ,我也安装了word(Microsoft Office Word 2007)和本机相同。
IIS为IIS 7.

根据网上所说
1:在服务器上安装office的Word软件.
2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"
3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
4:在"DCOM配置"中找到"Microsoft word 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft word 应用程序属性"对话框
5:点击"标识"标签,选择"交互式用户"
6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加 一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.
7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.
这样,我们便配置好了相应的Word的DCOM权限.

以上是网上的方法,我已试了,并且给Word组件增加了everyone用户的所有权限。

现在的问题是:

现在Word可以生成成功,但是每天第一次点击生成时还是会报此错误,而且接下来几分钟内都会报此错,然而过几分钟后再次点击生成便不再报错了,今天也不会再报错,但第二天又开始报。。。
请遇到过此问题的,或者知道这是怎么回事的朋友帮帮忙!
或者可以告诉我每天第一次(或前几次)生成文档时,与之后生成文档时有何区别,网站运行的身份是不同的吗?
...全文
585 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xfreyes 2011-06-22
  • 打赏
  • 举报
回复
................................
xfreyes 2011-06-13
  • 打赏
  • 举报
回复
没人理我了???
xfreyes 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wxr0323 的回复:]
在iis的应用程序池里面-属性-标识-把里面的帐号改成本地系统或者以管理员帐号登录。

组件需要现在服务器上安装或注册

参考
[/Quote]

现在最主要的问题是“不是不能生成,是每天第一次(或前几次)生成时会报错,此后便不再报错了
xfreyes 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 learnjsee 的回复:]
之前我也有遇到,是使用Excel,技术文档如下
在ASP.NET中使用Excel组件生成文档时,很可能会因权限问题而出现错误。

--------------------------------------以下是错误提示------------------------------------------
检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C00……
[/Quote]
刚试了下,如果
3: 在"DCOM配置"中找到“Microsoft Excel 应用程序”,右键,然后点击“属性”->“标识”->选择"启动服务".

仍会报错,“System.Web.HttpUnhandledException: 引发类型为“System.Web.HttpUnhandledException”的异常。 ---> System.NullReferenceException: 未将对象引用设置到对象的实例。”。
完全生成不了了。
yypf2540017 2011-06-09
  • 打赏
  • 举报
回复
收藏了
xfreyes 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 henanboy 的回复:]
好像是GC的功能,你到网上搜索一下
[/Quote]
进程关闭了,每次生成后我也有System.GC.Collect();
anbam 2011-06-09
  • 打赏
  • 举报
回复
绝对是com权限问题,需要细心的跟踪
遊戲王千金 2011-06-09
  • 打赏
  • 举报
回复
之前我也有遇到,是使用Excel,技术文档如下
在ASP.NET中使用Excel组件生成文档时,很可能会因权限问题而出现错误。

--------------------------------------以下是错误提示------------------------------------------
检索 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)或经过身份验证的请求用户。

--------------------------------------以下是解决方法------------------------------------------
要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。
解决方案:

1: 在"开始"->"运行"->dcomcnfg.exe启动"组件服务"。

2: 然后 "组件服务"->"计算机"->"我的电脑"->"DCOM配置"。

3: 在"DCOM配置"中找到“Microsoft Excel 应用程序”,右键,然后点击“属性”->“标识”->选择"启动服务".(注:这里并没有选择为“交互式用户”)

4: 在"安全"标签下:
a. "启动和激活权限"->"自定义"->"编辑"->增加"NETWORK SERVICE"、"ASP.NET"用户,并给它赋予"本地启动"和"本地激活"权限.
b. "访问权限"->"自定义"->"编辑"->增加"NETWORK SERVICE"用户,然后赋予"本地访问"权限.
c. "配置权限"->"自定义"->"编辑"->增加"NETWORK SERVICE"用户和"guest"账号.

这个配置是配置在服务器端的,服务器配置后,客户端不用配置就可以正常访问
HenanBoy 2011-06-09
  • 打赏
  • 举报
回复
好像是GC的功能,你到网上搜索一下
HenanBoy 2011-06-09
  • 打赏
  • 举报
回复
你是不是没有关闭word进程,你可以每次生成之后,关闭word进程,让客户自己下载打印或者其他操作
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lishuai1030 的回复:]

抢沙发……
[/Quote]

。。。。

没遇到过,坐等高人。。帮顶
lishuai1030 2011-06-09
  • 打赏
  • 举报
回复
抢沙发……
ilooknow 2011-06-09
  • 打赏
  • 举报
回复
学习了,顶一下!
子夜__ 2011-06-09
  • 打赏
  • 举报
回复
在iis的应用程序池里面-属性-标识-把里面的帐号改成本地系统或者以管理员帐号登录。

组件需要现在服务器上安装或注册

参考
xfreyes 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 truecoffeefox 的回复:]
,每次生成后我也有System.GC.Collect();

我感觉这样并不是太好,我做的时候最后把用到的赋null就行了,也没错误
至于com权限这个很难说,我开发用win7,部署到server2008同样的设置就是报错80070005
然后好在服务器是自己的,增加一个账户配置到web.config里就好了
[/Quote]

赋null也有,为防万一也加了GC.Collect();

13楼说的也试过了,一来在配置中写入系统的用户密码不太好,再则我那么设置了还是会报错,会报rpc的错误,而且我认为你这是解决不能生成文档时可尝试的方法,我现在时可以生成文档的,但是每天第一次(或几次)回报错,此后就不再报了。
小伙写代码 2011-06-09
  • 打赏
  • 举报
回复
你的第五步
5:点击"标识"标签,选择"交互式用户"
改成 下列用户 然后输入服务器账号密码

其他不变
lml926it 2011-06-09
  • 打赏
  • 举报
回复
这种配置问题 跟程序都有点远了
truecoffeefox 2011-06-09
  • 打赏
  • 举报
回复
,每次生成后我也有System.GC.Collect();

我感觉这样并不是太好,我做的时候最后把用到的赋null就行了,也没错误
至于com权限这个很难说,我开发用win7,部署到server2008同样的设置就是报错80070005
然后好在服务器是自己的,增加一个账户配置到web.config里就好了
xfreyes 2011-06-09
  • 打赏
  • 举报
回复
顶顶莫沉

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧