我用VC6的ATL COM AppWizard写了一个组件DataCache.GPSCache,它有如下几个函数:
1.RefreshCache(int *ret)
2.GetUnReadMsgCount(BSTR group_ids, int *ret)
3.GetTrackData(BSTR vids, BSTR *ret)
4.GetUnProcessAlarm(BSTR group_ids, BSTR *ret)我先写了一个VC下的定时刷新程序,调用函数RefreshCache,运用的是智能指针,这个在web服务器端运行:
void CCacheFreshDlg::OnTimer(UINT nIDEvent) 
{
         try
{
IGPSCachePtr pPtr1=IGPSCachePtr(__uuidof(GPSCache));
int cnt;
HRESULT hr=pPtr1->raw_RefreshCache(&cnt);
if(FAILED(hr))
{
//LogInfoTime("刷新错误!");
LogInfoTime("重新创建COM组件实例2!");
//IGPSCachePtr m_pPtr1=IGPSCachePtr(__uuidof(GPSCache));
}
}
catch(_com_error &e)
{
LogComError(e);
LogInfoTime("重新创建COM组件实例!");
//m_pPtr1=IGPSCachePtr(__uuidof(GPSCache));
return;
}
         CDialog::OnTimer(nIDEvent);
}
再在asp里调用除RefreshCache外的其他函数,调用GetUnReadMsgCount是这样的:
         dim objCache,iCount
Set objCache = server.CreateObject("DataCache.GPSCache.1")

iCount=objCache.GetUnReadMsgCount(groupRight)
response.write iCount
set objCache = nothing
然后在我的客户端程序里每按10秒调用这些asp若开上30个这样的客户端程序(其中调用有组件函数的asp),就会经常出现如下问题:
1.服务器端经常出现"dllhost.exe - 应用程序错误"的错误窗口
2.服务器的IIS无故停止

解决方案 »

  1.   

    小弟WEB方面的还没做过dllhost.exe是微软Windows操作系统的一部分,用于管理DLL应用
    我使用COM+的时候,如果组件内部有错误,比如delete 野指针等,也会出现dllhost.exe - 应用程序错误"错误的根源在你组件的内部,可以检查 内存分配释放
    只能帮你把错误方位缩小,解决方法没有算是帮你顶了
      

  2.   

    loverx(烟花) 说的没错,我做过类似的调用,路线上应该是可行的。如果iis在调用的组件崩溃,将会导致iis崩溃或陷入无限等待状况。从你的代码看来应该不存在错误,问题应该在组件内部。
      

  3.   

    dllhost是用来管理 RPC的,呵呵