直奔主题了,
我做了一个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可以生成成功,但是每天第一次点击生成时还是会报此错误,而且接下来几分钟内都会报此错,然而过几分钟后再次点击生成便不再报错了,今天也不会再报错,但第二天又开始报
请遇到过此问题的,或者知道这是怎么回事的朋友帮帮忙!
或者可以告诉我每天第一次(或前几次)生成文档时,与之后生成文档时有何区别,网站运行的身份是不同的吗?

解决方案 »

  1.   

    你是不是没有关闭word进程,你可以每次生成之后,关闭word进程,让客户自己下载打印或者其他操作
      

  2.   

    之前我也有遇到,是使用Excel,技术文档如下
    在ASP.NET中使用Excel组件生成文档时,很可能会因权限问题而出现错误。--------------------------------------以下是错误提示------------------------------------------
    检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败原因是出现以下错误: 80070005ASP.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"账号.这个配置是配置在服务器端的,服务器配置后,客户端不用配置就可以正常访问
      

  3.   

    绝对是com权限问题,需要细心的跟踪
      

  4.   

    进程关闭了,每次生成后我也有System.GC.Collect();
      

  5.   

    刚试了下,如果
    3: 在"DCOM配置"中找到“Microsoft Excel 应用程序”,右键,然后点击“属性”->“标识”->选择"启动服务".仍会报错,“System.Web.HttpUnhandledException: 引发类型为“System.Web.HttpUnhandledException”的异常。 ---> System.NullReferenceException: 未将对象引用设置到对象的实例。”。
    完全生成不了了。
      

  6.   

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

  7.   


    赋null也有,为防万一也加了GC.Collect();13楼说的也试过了,一来在配置中写入系统的用户密码不太好,再则我那么设置了还是会报错,会报rpc的错误,而且我认为你这是解决不能生成文档时可尝试的方法,我现在时可以生成文档的,但是每天第一次(或几次)回报错,此后就不再报了。
      

  8.   

    在iis的应用程序池里面-属性-标识-把里面的帐号改成本地系统或者以管理员帐号登录。组件需要现在服务器上安装或注册参考