INFORMAZIONI: Impossibile effettuare blocco chiamate da un componente STA

Traduzione articoli Traduzione articoli
Identificativo articolo: 291837 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Quando si effettua una chiamata di blocco dall'istanza di oggetto COM (Component Object Model) è che risiedono in un apartment a thread singolo (STA), tutte le altre istanze di COM live in quanto STA sono in attesa l'istanza sbloccare il apartment. Se è necessario apportare una chiamata di blocco da un componente, si consiglia di eseguire la chiamata di blocco da un componente cui modello di threading è disponibile.

Una chiamata è considerata un blocco se impiega una quantità di tempo o indeterminata di tempo per restituire, ad esempio chiamate al back-end, le chiamate di rete che utilizzano la chiamata di procedura remota (RPC) o i socket.

Inoltre, Microsoft Visual Basic possibile creare solo applicazioni di STA e componenti il cui modello di threading è apartment o mancante. Di conseguenza, non è necessario effettuare chiamate di blocco da un componente che è scritto in Visual Basic.

Informazioni

Componenti il cui modello di threading è apartment live in un apartment a thread singolo (STA). Più istanze di oggetti COM possono risiedere nello sta stesso. Tuttavia, è disponibile un solo thread (pertanto il nome) che tutte le istanze in tale apartment COM oggetto dei servizi. Se si apporta una chiamata di blocco da uno di tali istanze di oggetti COM, le altre istanze di oggetto COM sono affamate perché solo thread che può servire a essi è bloccato.

Si consiglia di eseguire chiamate di blocco da un componente che dispone di un modello di threading di disponibile. Questo componente si trova nell'apartment con multithreading (MTA). Come nel STA, più istanze di oggetti COM possono risiedere in un MTA. Tuttavia, il MTA dispone di più thread che le istanze dell'oggetto COM del servizio. Di conseguenza, quando questa istanza dell'oggetto COM effettua una chiamata di blocco, altri thread può servire altre istanze di oggetto COM. Questi thread è possibile anche istanza dell'oggetto COM del servizio che effettua una chiamata di blocco. Di conseguenza, per rendere i componenti presenti in MTA thread-safe, è necessario proteggere i dati globali con gli oggetti di sincronizzazione.

Un'istanza di oggetto COM da un STA chiama un metodo su un'istanza dell'oggetto COM che risiede nel MTA e che rende una chiamata di blocco, non blocca il componente STA. Infatti, quando il componente STA effettua la chiamata attraverso il proxy COM, il proxy invia i dati il MTA e COM pompe messaggi nel STA in modo che è possibile eseguire altre operazioni in relativo apartment. (Lavoro in un apartment STA arriva tramite messaggi di windows). Un altro thread nel MTA preleva la chiamata di COM tramite lo stub e consente il chiamata sull'istanza dell'oggetto COM, che a sua volta consente la chiamata di blocco, in modo efficace inserimento il thread in uno stato "attesa" del metodo. Quando termina la chiamata di blocco, il metodo di COM termina il proprio lavoro e restituisce i dati allo stub che restituisce dati per il proxy tramite un messaggio di windows. Il proxy nel thread STA preleva i dati nel messaggio di windows e invia il componente chiamante.

Un altro effetto di lato delle chiamate di blocco lungo in un STA è che RPC comunica con il STA tramite messaggi di windows. La chiamata di blocco impedisce che la comunicazione con qualsiasi altri potenziali finestre messaggio che è possibile che appartengono a tale thread.

Riferimenti

Per ulteriori informazioni sul modello di threading COM, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
136885INFORMAZIONI: OLE thread deve dispatch messaggi
Per ulteriori informazioni sull'architettura di DCOM (Distributed COM), vedere la seguente documentazione di Microsoft Platform Software Development Kit (SDK):
http://msdn.microsoft.com/en-us/library/ms809311.aspx

Proprietà

Identificativo articolo: 291837 - Ultima modifica: giovedì 12 luglio 2001 - Revisione: 1.3
Le informazioni in questo articolo si applicano a:
  • Microsoft COM+ 2.0 Standard Edition
Chiavi: 
kbmt kbclientserver kbinfo kbinprocsvr kbthread KB291837 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 291837
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com