发表于:2006-04-26 15:35:00
楼主
在应用DCOM技术开发软件产品时,错误经常莫名其妙的出现,如果我们预先对错误处理过程进行了处理,我们将会有效的减少系统的故障率。
DCOM 本身提供了错误处理过程,下面介绍这个错误处理过程的一个应用. ( R. C. Harrison提供)
当OPC技术在分布的计算机上实现互相访问时,我们必须考虑方法返回的RPC_E_* 错误代码,我们可以尝试采用下面的代码来实现一个CLIENT在发生错误时,重新连接到SEVER上.
// 在调用RPC时, 检查返回的HRESULT
if (FACILITY_RPC == HRESULT_FACILITY(hr))
{
if (RPC_E_DISCONNECTED == hr)
{
// 建立重新连接过程,(如 Call CoCreateInstance)
}
}
另外一点可能我们需要知道如何通过一种测试方式来知道SERVER已经失效,失效的原因是多种多样的,可能是某一个方法的调用,当出现这种情况时,CLIENT需要重新建立与SEVER之间的连接,测量SERVER失效的解决方法是我们在调用每一个方法时,应该通过返回的值,检查是否存在错误发生,另外注意:
1:当连接已经丢失或失效和SERVER周期性地失效,没必要每个接口指针都调用Release() 。
2:不要总使用 QueryInterface() 来测试SERVER的状态,因为频繁访问同一个IID ,proxies不能自动更新SERVER的状态。我们可以用IOPCServer->GetStatus()来替代.
3:在OPCServer访问时,常出现的错误:OPCInvalidHandle, OPCBadType, OPCPublic, OPCBadRights, OPCUnknownItemID, OPCInvalidItemID, OPCInvalidFilter, OPCUnknownPath, OPCRange, OPCDuplicateName, OPCUnsupportedRate, OPCClamp, OPCInuse, OPCInvalidConfig, OPCNotFound, OPCInvalidPID
更精确的描述请参照:“Data Access Automation Interface Standard“