Funzione WsReceiveMessage (webservices.h)

Ricevere un messaggio e deserializzare il corpo del messaggio come valore.

Sintassi

HRESULT WsReceiveMessage(
  [in]           WS_CHANNEL                   *channel,
  [in]           WS_MESSAGE                   *message,
                 const WS_MESSAGE_DESCRIPTION **messageDescriptions,
  [in]           ULONG                        messageDescriptionCount,
  [in]           WS_RECEIVE_OPTION            receiveOption,
  [in]           WS_READ_OPTION               readBodyOption,
  [in, optional] WS_HEAP                      *heap,
                 void                         *value,
  [in]           ULONG                        valueSize,
                 ULONG                        *index,
  [in, optional] const WS_ASYNC_CONTEXT       *asyncContext,
  [in, optional] WS_ERROR                     *error
);

Parametri

[in] channel

Canale da cui ricevere.

[in] message

Oggetto messaggio utilizzato per la ricezione.

Il messaggio deve essere nello stato WS_MESSAGE_STATE_EMPTY .

messageDescriptions

Matrice di puntatori alle descrizioni dei messaggi che specifica i metadati per i tipi di messaggi previsti.

[in] messageDescriptionCount

Numero di elementi nella matrice messageDescriptions.

[in] receiveOption

Indica se il messaggio è obbligatorio. Per altre informazioni, vedere WS_RECEIVE_OPTION .

[in] readBodyOption

Indica se l'elemento body è obbligatorio e come allocare il valore.
Per altre informazioni, vedere WS_READ_OPTION .

[in, optional] heap

Heap in cui archiviare i valori deserializzati. Se l'heap non è necessario per il tipo specificato, questo parametro può essere NULL.

value

L'interpretazione di questo parametro dipende dalla WS_READ_OPTION.

Se WS_RECEIVE_OPTIONAL_MESSAGE viene specificato per il parametro receiveOption e non sono disponibili altri messaggi nel canale, questo parametro non viene toccato. In questo caso, la funzione restituisce WS_S_END. Vedere Valori restituiti di Servizi Web Windows.

Se bodyElementDescription del WS_MESSAGE_DESCRIPTION corrispondente è NULL, questo parametro non viene toccato. In questo caso, non è necessario specificare il parametro .

[in] valueSize

L'interpretazione di questo parametro dipende dalla WS_READ_OPTION.

index

Se WS_RECEIVE_OPTIONAL_MESSAGE viene specificato per il parametro receiveOption e non sono disponibili altri messaggi nel canale, questo parametro non viene modificato. In questo caso, la funzione restituirà WS_S_END.

In caso contrario, se la funzione ha esito positivo, questo conterrà l'indice in base zero nella matrice di descrizioni dei messaggi che indicano quale corrisponde.

Questo parametro può essere NULL se il chiamante non è interessato al valore , ad esempio se è presente una sola descrizione del messaggio.

[in, optional] asyncContext

Informazioni su come richiamare la funzione in modo asincrono o NULL se si richiama in modo sincrono.

[in, optional] error

Specifica dove archiviare informazioni aggiuntive sull'errore se la funzione ha esito negativo.

Valore restituito

Questa funzione può restituire uno di questi valori.

Codice restituito Descrizione
WS_S_ASYNC
L'operazione asincrona è ancora in sospeso.
WS_S_END
È stata specificata l'opzione di ricezione WS_RECEIVE_OPTIONAL_MESSAGE e non sono disponibili altri messaggi per il canale.
WS_E_ENDPOINT_FAULT_RECEIVED
Il messaggio ricevuto contiene un errore. L'errore può essere estratto dal WS_ERROR usando WsGetErrorProperty.
WS_E_OPERATION_ABORTED
L'operazione è stata interrotta.
WS_E_INVALID_OPERATION
L'operazione non è consentita a causa dello stato corrente dell'oggetto .
WS_E_ENDPOINT_NOT_FOUND
L'endpoint remoto non esiste o non è stato possibile individuarsi.
WS_E_ENDPOINT_ACCESS_DENIED
L'accesso è stato negato dall'endpoint remoto.
WS_E_ENDPOINT_DISCONNECTED
La connessione con l'endpoint remoto è stata terminata.
WS_E_ENDPOINT_FAILURE
L'endpoint remoto non è riuscito a elaborare la richiesta.
WS_E_ENDPOINT_NOT_AVAILABLE
L'endpoint remoto non è attualmente in servizio in questa posizione.
WS_E_ENDPOINT_TOO_BUSY
L'endpoint remoto non è in grado di elaborare la richiesta a causa dell'overload.
WS_E_ENDPOINT_UNREACHABLE
L'endpoint remoto non è raggiungibile.
WS_E_INVALID_ENDPOINT_URL
L'URL dell'indirizzo dell'endpoint non è valido.
WS_E_INVALID_FORMAT
I dati di input non erano nel formato previsto o non hanno il valore previsto.
WS_E_OPERATION_TIMED_OUT
L'operazione non è stata completata entro il tempo assegnato.
WS_E_PROXY_ACCESS_DENIED
Accesso negato dal server proxy HTTP.
WS_E_PROXY_FAILURE
Il server proxy HTTP non è riuscito a elaborare la richiesta.
WS_E_QUOTA_EXCEEDED
È stata superata una quota.
WS_E_SECURITY_VERIFICATION_FAILURE
La verifica di sicurezza non è riuscita per i dati ricevuti.
WS_E_SECURITY_SYSTEM_FAILURE
Un'operazione di sicurezza non è riuscita nel framework di Servizi Web Windows.
WS_E_SECURITY_TOKEN_EXPIRED
Un token di sicurezza è stato rifiutato dal server perché è scaduto.
WS_E_PROXY_REQUIRES_BASIC_AUTH
Il server proxy HTTP richiede lo schema di autenticazione HTTP "basic".
WS_E_PROXY_REQUIRES_DIGEST_AUTH
Il server proxy HTTP richiede lo schema di autenticazione HTTP "digest".
WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH
Il server proxy HTTP richiede lo schema di autenticazione HTTP 'negotiate'.
WS_E_PROXY_REQUIRES_NTLM_AUTH
Il server proxy HTTP richiede lo schema di autenticazione HTTP 'NTLM'.
WS_E_SERVER_REQUIRES_BASIC_AUTH
L'endpoint remoto richiede lo schema di autenticazione HTTP 'basic'.
WS_E_SERVER_REQUIRES_DIGEST_AUTH
L'endpoint remoto richiede lo schema di autenticazione HTTP "digest".
WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH
L'endpoint remoto richiede lo schema di autenticazione HTTP 'negotiate'.
WS_E_SERVER_REQUIRES_NTLM_AUTH
L'endpoint remoto richiede lo schema di autenticazione HTTP 'NTLM'.
CERT_E_EXPIRED
Un certificato obbligatorio non rientra nel periodo di validità durante la verifica rispetto all'orologio di sistema corrente o al timestamp nel file firmato.
CERT_E_CN_NO_MATCH
Il nome CN dei certificati non corrisponde al valore passato.
CERT_E_UNTRUSTEDROOT
Catena di certificati elaborata, ma terminata in un certificato radice che non è considerato attendibile dal provider di attendibilità.
CERT_E_WRONG_USAGE
Il certificato non è valido per l'utilizzo richiesto.
CRYPT_E_REVOCATION_OFFLINE
La funzione di revoca non è in grado di completare il controllo di revoca perché il server di revoca è offline.
E_OUTOFMEMORY
Memoria insufficiente.
E_INVALIDARG
Uno o più argomenti non sono validi.
Altri errori
Questa funzione può restituire altri errori non elencati sopra.

Commenti

Questa funzione usa i metadati sui tipi di messaggi previsti per deserializzare il corpo.
I metadati sono una matrice di puntatori a WS_MESSAGE_DESCRIPTIONs. Ogni descrizione del messaggio contiene un valore di azione, utilizzato per corrispondere all'azione del messaggio e un WS_ELEMENT_DESCRIPTION che fornisce i metadati per l'elemento corpo.

Quando sono state ricevute le intestazioni del messaggio, la funzione analizzerà la matrice per trovare una corrispondenza rispetto all'azione. La prima descrizione del messaggio che corrisponde viene usata per deserializzare il corpo e l'indice in base zero di questa descrizione del messaggio nella matrice viene restituito nel parametro index out. Se la funzione ha esito positivo, il parametro index out verrà sempre impostato per indicare quale descrizione del messaggio è stata usata.

Affinché una descrizione del messaggio corrisponda, il valore dell'azione deve corrispondere esattamente a quello del messaggio. Se l'azione nella WS_MESSAGE_DESCRIPTION è NULL, l'azione corrisponde sempre. Ciò può essere usato nel caso in cui non vi sia alcuna intestazione di azione nel messaggio ricevuto o se il corpo è sempre lo stesso indipendentemente dall'azione.

Se il corpo deve essere vuoto, il campo bodyElementDescription del WS_MESSAGE_DESCRIPTION potrebbe essere NULL.

Se bodyElementDescription non è NULL, questa funzione deserializza il corpo come descritto in WsReadBody.

Dopo aver ricevuto un messaggio, è possibile esaminare le relative intestazioni usando WsGetHeader o WsGetCustomHeader.

Requisiti

   
Client minimo supportato Windows 7 [app desktop | App UWP]
Server minimo supportato Windows Server 2008 R2 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione webservices.h
Libreria WebServices.lib
DLL WebServices.dll