Strategie per la gestione degli errori in COM+
In questo argomento vengono identificate diverse strategie di gestione degli errori da tenere presenti durante lo sviluppo di componenti per COM+.
Restituisce un valore HRESULT per tutti i metodi in tutte le interfacce dei componenti. COM+ usa valori HRESULT per segnalare eventuali errori nell'esecuzione di chiamate di funzioni o chiamate al metodo di interfaccia. HrESULT indica se un metodo ha avuto esito positivo o negativo e identifica la funzionalità associata all'errore, ad esempio RPC, WIN32 o ITF per errori specifici dell'interfaccia. Inoltre, le API di sistema forniscono una ricerca da un HRESULT a una stringa che descrive la condizione di errore. L'uso di metodi che restituiscono valori HRESULT sono fondamentali per i componenti ben scritti e sono essenziali per il processo di debug. Microsoft Visual Basic definisce automaticamente ogni metodo con un HRESULT come restituito. In Microsoft Visual C++, è necessario restituire in modo esplicito un HRESULT. Per altre informazioni sui codici di errore HRESULT, vedere Struttura dei codici di errore COM.
Avviare l'oggetto raccolta ErrorInfo con qualsiasi mezzo fornito dallo strumento di sviluppo. Gli oggetti raccolta ErrorInfo sono spesso denominati eccezioni COM perché consentono a un oggetto di passare (o generare) informazioni di errore avanzate al chiamante, anche oltre i limiti dell'apartment. Il valore di questo oggetto errore generico è che integra un HRESULT, estendendo il tipo di informazioni di errore che è possibile restituire a un chiamante. Ogni oggetto dell'insieme ErrorInfo restituisce una descrizione contestuale, l'origine dell'errore e l'identificatore dell'interfaccia del metodo che ha generato l'errore. È anche possibile includere puntatori a una voce in un file della Guida. L'automazione fornisce tre interfacce per gestire l'oggetto errore. Il componente deve implementare l'interfaccia di automazione ISupportErrorInfo per annunciarne il supporto per la raccolta ErrorInfo . Quando si verifica un errore, il componente usa l'interfaccia di automazione ICreateErrorInfo per inizializzare un oggetto errore. Dopo che il chiamante esamina HRESULT e rileva che la chiamata al metodo non è riuscita, esegue una query sull'oggetto per verificare se supporta l'insieme ErrorInfo . In caso affermativo, il chiamante usa l'interfaccia di automazione IErrorInfo per recuperare le informazioni sull'errore. I programmatori di Visual Basic hanno facile accesso all'oggetto raccolta ErrorInfo , esposto tramite l'oggetto Err. È possibile generare errori con la funzione Err Raise e rilevare gli errori con l'istruzione On Error . Il livello di runtime di Visual Basic si occupa automaticamente del mapping. Se si usa il supporto del compilatore COM di Visual C++, è possibile usare la classe _com_raise_error per segnalare un errore e la classe _com_error per recuperare le informazioni sull'errore. COM+ non propaga le eccezioni C++ tradizionali come informazioni IErrorInfo estese. Per altre informazioni sull'oggetto insieme ErrorInfo , vedere "Gestione degli errori" nella guida all'automazione.
Nota
COM richiede che tutti gli oggetti dell'insieme ErrorInfo eselenchino il marshalling per valore, implicando che i componenti che implementano l'interfaccia di automazione IErrorInfo devono anche implementare e supportare l'interfaccia IMarshal. L'implementazione dell'interfaccia IMarshal deve supportare il marshalling per valore per il componente.
Usare le transazioni per gestire gli errori delle risorse condivise. Le transazioni automatiche possono ridurre significativamente la quantità di codice di gestione degli errori che è necessario scrivere quando si usano gestori di risorse gestite dallo stato. Tuttavia, le transazioni non eliminano completamente la necessità di gestire gli errori. È comunque necessario restituire i codici di errore dai metodi di interfaccia e controllare tali codici di errore all'interno del chiamante per evitare di eseguire operazioni non necessarie per una transazione condannata. Per altre informazioni sulla combinazione della gestione degli errori con l'elaborazione delle transazioni, vedere Velocità delle transazioni notificando all'oggetto radice.
Generare errori in modo esplicito. Evitare di lasciare che le informazioni sugli errori lascino un oggetto a meno che l'oggetto non generi in modo esplicito l'errore. Rilevare tutti gli errori generati dallo strumento e gestirli nel codice del componente. Almeno, includere un gestore standard per segnalare errori imprevisti in modo coerente.
Usare l'intervallo di errori FACILITY_ITF per segnalare errori specifici dell'interfaccia. Gli errori specifici dell'interfaccia devono trovarsi nell'intervallo di errori FACILITY_ITF, tra 0x0200 e 0xFFFF. È possibile definire un codice di errore personalizzato in Visual Basic come offset da vbObjectError. Usare la macro MAKE_HRESULT in C++ per introdurre un codice di errore specifico dell'interfaccia, come illustrato nell'esempio seguente:
const HRESULT ERROR_NUMBER = MAKE_HRESULT (SEVERITY_ERROR, FACILITY_ITF, 10);
Argomenti correlati