在web上 如何解决 对 COM 组件的调用返回了错误

System.Runtime.InteropServices.COMException (0x80004005): 对 COM 组件的调用返回了错误 HRESULT E_FAIL 
捆饶我10几小时的问题终于解决了,因为使用了STA模式,我在各个函数写入日志函数来替代跟踪调试.

2002-1-6 13:51:12正在中止线程。InitComobject()
2002-1-6 13:51:52StaRun New WebPreviewBase前还未挂
2002-1-6 13:51:52WebPreviewBase的构造函数没有问题
2002-1-6 13:51:52进入 GetWebPreview()还没有挂
2002-1-6 13:51:52进入InitComobject()还没有挂http://webpic.marlin.com.cn/
2002-1-6 13:51:52对 COM 组件的调用返回了错误 HRESULT E_FAIL。InitComobject()
2002-1-6 13:51:52对 COM 组件的调用返回了错误 HRESULT E_FAIL。 213

最后又锁定到InitComobject()函数

try
            
{
                Commons.ErrorInfo.Log("进入InitComobject()还没有挂"+this._uri);
                _wb.Navigate(this._uri); //在这个地方挂掉的
                Commons.ErrorInfo.Log("_wb.Navigate()"+_uri+" 还没有挂");
                //因为没有窗体,所以必须如此
                while (_wb.ReadyState != WebBrowserReadyState.Complete)
                {
                    //立即重绘
                    Application.DoEvents();
                }
                //这句最好注释,不然网页上的动画都抓不到了
                //_wb.Stop();
                if (_wb.ActiveXInstance == null) throw new Exception("实例不能为空");
            }
            
catch (Exception ex)
            
{
                Commons.ErrorInfo.Log(ex.Message 
+ "InitComobject()");
                
throw ex;
            }

 诡异的地方是 在本地没有任何问题 而放到服务器上 就会报上面的错误.
真正的原因今天中午吃饭时终于被我擒到了,
是IIS的问题,只要重新启动一下IIS 就ok了
这真是一个简单的问题,但也是一个很冷僻的问题
WEB上调用Com组件或者System.Windows 下的dll 只要报这种错误都是源于这个问题.

 

posted on 2006-12-31 14:04  坯子  阅读(5099)  评论(7编辑  收藏  举报

导航