Condividi tramite


Gestione della pipe asincrona lato client

Prima di eseguire una chiamata remota asincrona, il client deve inizializzare prima l'handle asincrono. Come per le procedure nonpipe, il client chiama una funzione asincrona con l'handle asincrono come primo parametro e usa l'handle asincrono per inviare e ricevere i dati della pipe, eseguire una query sullo stato della chiamata e ricevere la risposta.

Il client effettua la chiamata alla procedura remota asincrona con l'handle asincrono come primo parametro. Il client può usare questo handle per eseguire query sullo stato della chiamata e per ricevere la risposta. Il modello di pipe asincrona è simmetrico. Sia le applicazioni client che quelle server inviano e ricevono attivamente i dati della pipe (anziché RPC sincroni, in cui i dati della pipe vengono inviati e ricevuti passivamente).

Il client invia dati pipe asincroni chiamando la funzione push nella pipe asincrona appropriata, con la variabile di stato della pipe come primo parametro. Quando la funzione push restituisce, il client può modificare o liberare il buffer di invio.

Se il flag RPC_ASYNC_NOTIFY_ON_SEND_COMPLETE è impostato nell'handle asincrono e se le API vengono usate come meccanismo di notifica, un APC viene accodato al termine dell'invio della pipe. È possibile sfruttare questo meccanismo per implementare il controllo del flusso. Si noti tuttavia che se il client esegue il push di un altro buffer prima del completamento del push precedente, il client può, a seconda della velocità dell'operazione di trasferimento, ricevere una sola notifica di invio, anziché una notifica per ogni buffer o ogni operazione push . Quando il client ha inviato tutti i dati della pipe, effettua una chiamata push finale con il numero di elementi impostati su 0.

Il programma client riceve i dati della pipe asincrona chiamando la funzione pull sulla pipe asincrona appropriata, con la variabile di stato della pipe come primo parametro. Se non sono disponibili dati di pipe, la funzione pull restituisce RPC_S_ASYNC_CALL_PENDING.

Se il meccanismo di notifica è APC e il server ha restituito RPC_S_ASYNC_CALL_PENDING, il client deve attendere finché non riceve rpcReceiveComplete APC da runtime prima di chiamare nuovamente il pull .