Valori degli attributi di sincronizzazione
L'attributo di sincronizzazione è una proprietà dichiarativa che specifica il tipo di sincronizzazione in cui si desidera che i componenti siano attivati. Quando si include l'attributo di sincronizzazione, COM+ gestisce i dettagli della sincronizzazione per conto dell'utente; non è necessario effettuare altre chiamate.
A seconda dei requisiti, un oggetto può condividere la sincronizzazione del chiamante, richiedere una nuova sincronizzazione o operare senza sincronizzazione.
COM+ fornisce i valori dell'attributo di sincronizzazione seguenti:
Disabled. Quando si disabilita l'attributo di sincronizzazione, COM+ ignora i requisiti di sincronizzazione del componente nel determinare il contesto per l'oggetto. Di conseguenza, l'oggetto può o meno condividere il contesto del chiamante (e la sincronizzazione).
In generale, è consigliabile usare questo valore di attributo quando si conosce che il componente non accede mai a un gestore risorse. Quando si esegue la migrazione dei componenti COM a COM+, è necessario disabilitare l'attributo di sincronizzazione per mantenere lo stesso comportamento del componente COM non configurato. Un componente non configurato è un componente COM che non è stato installato in un'applicazione COM+.
Non supportato. Un oggetto con questo valore non partecipa mai alla sincronizzazione, indipendentemente dallo stato del chiamante. Questa impostazione è disponibile solo per i componenti non transazionali e non per il servizio di attivazione JIT (COM+).
Supportato. Un oggetto con questo valore partecipa alla sincronizzazione, se esistente. Questo valore viene dichiarato quando si vuole condividere un oggetto nella sincronizzazione del chiamante, ma non è necessaria la sincronizzazione.
Un buon motivo per impostare l'attributo di sincronizzazione su Supported è che questa impostazione può essere meno costosa in termini di risorse di sistema. Tuttavia, è più difficile scrivere il componente a causa della necessità di proteggerlo dalle chiamate simultanee. L'implicazione dell'impostazione dell'attributo di sincronizzazione su Supported è che, in determinate circostanze, è possibile creare un'istanza dell'oggetto in modo che non sia sincronizzata. Se il modello di threading del componente è Gratuito o Entrambi, è necessario proteggere i dati dell'istanza con un tipo di meccanismo di blocco. Se il modello di threading è Apartment (STA), non sarà necessario proteggere i dati dell'istanza.
Obbligatorio. Quando si imposta questo attributo, COM+ garantisce che tutti gli oggetti creati dal componente verranno sincronizzati. In effetti, ogni volta che COM+ crea un'istanza del componente, verifica che sia presente un solo thread che passa attraverso questa istanza alla volta.
Quando COM+ attiva un oggetto, esamina lo stato di sincronizzazione del chiamante. Se il chiamante è sincronizzato, COM+ scorre il limite di sincronizzazione del chiamante per includere il nuovo oggetto. In caso contrario, COM+ avvia la sincronizzazione.
Richiede nuovo. Un oggetto con questo valore deve partecipare a una nuova sincronizzazione, in cui COM+ gestisce contesti e appartamenti per conto di tutti i componenti coinvolti nella chiamata. COM+ avvia automaticamente una nuova sincronizzazione, distinta dalla sincronizzazione del chiamante.
Un buon motivo per impostare l'attributo di sincronizzazione su Richiede nuovo è che questa impostazione consente di effettuare chiamate esterne a un'istanza del componente in modo più efficiente. Tuttavia, esegue anche chiamate tra l'oggetto e l'oggetto che lo ha creato più costoso in termini di risorse di sistema.
Si supponga, ad esempio, che l'oggetto e il relativo oggetto creator condividano lo stesso limite di sincronizzazione. Se il client A chiama l'oggetto creator e il client B chiama l'oggetto, la seconda chiamata dovrà attendere fino al completamento della prima chiamata. Se si imposta Richiede nuovo, l'oggetto viene creato in un limite di sincronizzazione separato. In questo caso, le chiamate da altri oggetti possono essere elaborate contemporaneamente. Tuttavia, le chiamate dall'oggetto creator all'oggetto richiedono più risorse di sistema perché devono superare i limiti di sincronizzazione.
Argomenti correlati