Serializzazione in modalità mista di handle di contesto
A partire da Windows XP, un'unica interfaccia può contenere handle di contesto serializzati e non serializzati, consentendo a un metodo su un'interfaccia di accedere esclusivamente a un handle di contesto (serializzato), mentre altri metodi accedono a tale contesto in modalità condivisa (nonrializzati). Per altre informazioni sugli handle di contesto, vedere gli attributi seguenti:
Le funzionalità di accesso in modalità serializzata e condivisa sono paragonabili ai meccanismi di blocco di lettura/scrittura; i metodi che usano un handle di contesto serializzato sono utenti esclusivi (writer), mentre i metodi che usano un handle di contesto nonrializzato sono utenti condivisi (lettori). I metodi che eliminano o modificano lo stato di un handle di contesto devono essere serializzati. I metodi che non modificano lo stato di un handle di contesto, ad esempio i metodi che semplicemente leggono da un handle di contesto, possono essere nonrializzati. L'uso di un handle di contesto in modalità mista può migliorare notevolmente la scalabilità di un server, soprattutto quando più thread effettuano chiamate simultanee allo stesso handle di contesto.
RPC non applica "blocco di scrittura" ai metodi che usano un handle di contesto in modalità condivisa, il che significa che le applicazioni devono assicurarsi che gli handle di contesto in modalità condivisa non vengano modificati. La modifica di un handle di contesto usato in modalità condivisa può causare danneggiamenti sottili del contenuto dell'handle di contesto, che non è possibile eseguire il debug.
La modifica della logica di serializzazione di un handle di contesto influisce solo sul server. Inoltre, la modifica della logica di serializzazione di un handle di contesto non influisce sul formato di fili e quindi le modifiche apportate alla logica di serializzazione in un server non influiscono sulla capacità dei client esistenti di interagire con il server.
Non è consigliabile usare solo handle di contesto nonrializzati. I server che usano handle nonrializzati devono passare all'accesso serializzato per il metodo che chiude l'handle di contesto.
Gli handle di contesto che sono [out]-only vengono in genere usati dai metodi di creazione e non richiedono alcuna serializzazione. Pertanto, qualsiasi attributo di serializzazione applicato a handle di contesto [out]-only, ad esempio context_handle_serialize o context_handle_noserialize, viene ignorato da RPC.
Nota
I metodi di creazione vengono serializzati in modo implicito.
Esempio
I due esempi seguenti illustrano come abilitare la serializzazione in modalità mista degli handle di contesto.
Nel primo esempio viene illustrato come eseguire questa operazione nel file IDL:
typedef [context_handle] void *TestContextHandleExclusive;
typedef [context_handle] TestContextHandleExclusive TestContextHandleShared;
void
UseShared(...
[in] TestContextHandleShared *Ctx,
...);
void
UseExclusive(...
[in, out] TestContextHandleExclusive *Ctx,
...);
Il secondo esempio illustra come abilitare la serializzazione in modalità mista degli handle di contesto nel file ACF:
typedef [context_handle_serialize] TestContextHandleExclusive;
typedef [context_handle_noserialize] TestContextHandleShared;
Argomenti correlati