Condividi tramite


Progettazione di interfacce remotabili

Con l'avvento del modello a oggetti componente distribuito, è importante che l'interfaccia personalizzata sia remotabile, anche se si intende usarla solo in-process.

MIDL non è solo un modo per generare file di intestazione per le interfacce. È un linguaggio di programmazione per la comunicazione remota che consente di usare le interfacce tra computer, processi e limiti di thread. Ciò significa che è necessario verificare il comportamento delle interfacce definite da MIDL in tali condizioni prima di rilasciare il programma ai clienti. Se hai commesso un errore nel tuo IDL e l'interfaccia non è remota correttamente, può essere difficile rimediare a tale errore. È necessario rivedere l'interfaccia con un nuovo IID e lasciare quella precedente per la compatibilità con le versioni precedenti oppure è necessario convertire ogni client e ogni computer server ovunque contemporaneamente.

Anche se l'interfaccia non verrà mai usata out-of-process, può essere usata tra thread. Il problema peggiore per un file IDL non selezionato può verificarsi per i server in-process che non supportano più appartamenti a thread singolo. Un server che non specifica un modello di threading viene implicitamente a thread singolo. Tutto ciò che è contrassegnato con thread singolo viene forzato al thread che prima ha chiamato CoInitialize o CoInitializeEx. Se un altro thread è quello che ha attivato l'oggetto, tutte le interfacce in tale server a thread singolo devono essere remote al thread di attivazione, il che può comportare la restituzione di REGDB_E_IIDNOTREG in risposta a una chiamata a QueryInterface). A meno che non sia assolutamente possibile affermare che l'interfaccia è sia in-process che verrà sempre chiamata sullo stesso thread, si otterrà remoto in un certo momento.

Infine, come finestra di progettazione dell'interfaccia, è necessario considerare il modo in cui le applicazioni client useranno l'interfaccia. Due elementi, insieme, determinano se un'interfaccia sarà efficiente attraverso i limiti del processo e del computer: la frequenza delle chiamate al metodo oltre il limite dell'interfaccia e la quantità di dati da trasferire in una determinata chiamata al metodo. Anche se COM rende trasparenti le chiamate tra processi e reti incrociate ai programmi, non può effettuare chiamate ad alta frequenza e larghezza di banda elevata efficienti in spazi di indirizzi. In alcuni casi, è più appropriato progettare interfacce che normalmente verranno implementate solo come server in-process, mentre altre interfacce sono più appropriate per l'uso remoto.