Adapter di trasmissione SOAP
L'adapter di trasmissione SOAP viene utilizzato per chiamare un servizio Web. A tale scopo, l'adapter legge il contesto del messaggio nell'oggetto messaggio BizTalk per ottenere il nome del proxy e chiama il proxy del servizio Web esterno associato.
Autenticazione client per l'adapter di trasmissione SOAP
L'adapter di trasmissione SOAP esegue l'autenticazione con il server di destinazione mediante uno dei tipi di autenticazione seguenti:
Anonimo. Si tratta dell'impostazione predefinita.
Base. La connessione SOAP trasmette il nome utente e la password in testo normale.
Digest. La connessione SOAP trasmette il nome utente e la password in formato crittografato.
Kerberos o NTLM. Non vengono trasmessi né il nome utente né la password attraverso la connessione SOAP. L'adapter SOAP utilizza sempre le credenziali del processo nel quale è in esecuzione per questo tipo di autenticazione.
L'adapter di trasmissione SOAP, inoltre, può fornire un certificato client SSL (Secure Sockets Layer) al server Web se quest'ultimo lo richiede o lo accetta.
Se è stato abilitato Enterprise Single Sign-On (SSO), quando l'adapter di trasmissione SOAP riceve un messaggio con la richiesta alla proprietà SSOTicket , l'adapter si connette a un server SSO per convalidare e riscattare il ticket. Dopo la convalida, il ticket viene decrittografato e le credenziali relative al sistema affiliato vengono recuperate dall'archivio delle credenziali. L'adapter SOAP utilizza quindi le credenziali per connettersi al sistema affiliato e la richiesta SOAP viene elaborata.
Certificati client per l'adapter di trasmissione SOAP
L'adapter di trasmissione SOAP è in grado di stabilire una connessione protetta con i server che accettano o richiedono certificati client. Se si specifica un certificato client, l'adapter utilizzerà tale certificato per effettuare la connessione ai server che richiedono o accettano certificati client. Se non si specifica un certificato client e il server di destinazione richiede questo tipo di certificato, l'adapter non riuscirà a inviare il messaggio e seguirà la logica standard di ripetizione dei tentativi.
L'adattatore di invio SOAP usa il certificato client dall'archivio personale dell'account in cui è in esecuzione il processo di BizTalk Server. Il certificato viene specificato dall'adapter in base all'identificazione personale. Se per qualsiasi motivo l'adapter non riesce a caricare il certificato, il messaggio che stava inviando viene sospeso.
Messaggi di riconoscimento negativo (NACK) generati per le trasmissioni non riuscite dall'adapter SOAP o HTTP
Quando un messaggio viene trasmesso correttamente, il motore di messaggistica di BizTalk pubblica un messaggio di riconoscimento (ACK) associato nel database MessageBox, se sono abilitate le notifiche di recapito. Analogamente, quando un messaggio viene sospeso dal motore di messaggistica BizTalk o da un'orchestrazione viene sospeso dal motore di orchestrazione, BizTalk Server pubblica un messaggio di riconoscimento negativo associato a MessageBox. Il messaggio NACK contiene proprietà di contesto e una parte corpo del messaggio costituita da un errore SOAP. Se il messaggio NACK viene generato a causa di una trasmissione non riuscita dagli adattatori HTTP o SOAP, l'errore SOAP contiene l'elemento Headers e l'elemento Body della risposta dal server Web di destinazione. Di seguito è riportato un esempio di errore SOAP in un messaggio NACK generato per una trasmissione SOAP non riuscita:
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP:Body>
<SOAP:Fault>
<faultcode>Microsoft BizTalk Server Negative Acknowledgment</faultcode>
<faultstring>An error occurred while processing the message, refer to the details section for more information</faultstring>
<faultactor>http://localhost/receivestandard.asp</faultactor>
<detail>
<ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd">
<NAckID>{4E646707-03AA-4493-95C7-A64B09E2987D}</NAckID>
<ErrorCode>0x80131600</ErrorCode>
<ErrorCategory>0</ErrorCategory>
<ErrorDescription>The remote server returned an error: (404) Not Found.</ErrorDescription>
<ErrorDetail>
<HttpErrorDetail xmlns="http://schema.microsoft.com/BizTalk/2006/HttpErrorDetails.xsd">
<Headers>Server: Microsoft-IIS/5.1 Date: Wed, 21 Apr 2005 00:27:47 GMT X-Powered-By: ASP.NET Connection: close Content-Type: text/html Content-Length: 67 </Headers>
<Body>We could not locate the page you requested. Please check the URL.</Body>
</HttpErrorDetail>
</ErrorDetail>
</ns0:NACK>
</detail>
</SOAP:Fault>
</SOAP:Body>
</SOAP:Envelope>
Nota
L'elemento Headers e l'elemento Body sono limitati a 48 KB. L'elemento Headers viene arrotondato alla coppia di valori di intestazione più vicina senza superare il limite. L'elemento Body viene troncato a 48 KB.
Nota
I messaggi NACK e ACK vengono rimossi se non sono presenti sottoscrizioni corrispondenti. Tali messaggi non vengono sospesi dal motore di messaggistica.
Per eseguire la sottoscrizione a un messaggio NACK, è possibile effettuare una delle seguenti operazioni:
Creare una porta di trasmissione con un filtro per la proprietà di contesto del messaggio appropriata. Per un elenco di proprietà del contesto di sistema, vedere Proprietà del contesto del messaggio di messaggio nell'interfaccia utente e informazioni di riferimento sullo spazio dei nomi delle API per sviluppatori .
Inviare da una porta di orchestrazione contrassegnata con notifica di recapito = trasmesso. Se una porta di orchestrazione è contrassegnata con notifica di recapito = trasmesso, l'orchestrazione attenderà fino a quando non riceve un ACK o un NACK per il messaggio trasmesso. Se viene generato un messaggio NACK, verrà instradato all'orchestrazione e questa genererà un'eccezione DeliveryFailureException. Tale eccezione viene deserializzata dall'errore SOAP contenuto nel corpo del messaggio NACK. Per recuperare la stringa del messaggio di eccezione dall'errore SOAP restituito all'orchestrazione, eseguire il cast di DeliveryFailureException in un'eccezione SoapException, quindi accedere a InnerXml dalla sezione Detail. L'esempio di codice seguente illustra come eseguire questa operazione:
// Cast the DeliveryFailureException to a SoapException… System.Web.Services.Protocols.SoapException se = (System.Web.Services.Protocols.SoapException)e.InnerException; System.Diagnostics.Trace.WriteLine(se.Detail.InnerXml); //e is an Microsoft.XLANGs.BaseTypes.DeliveryFailureException //object type created in an Exception handler
Con il codice di esempio precedente verrà restituito un frammento XML simile al seguente:
<ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd"> <NAckID>{4E646707-03AA-4493-95C7-A64B09E2987D}</NAckID> <ErrorCode>0x80131600</ErrorCode> <ErrorCategory>0</ErrorCategory> <ErrorDescription>The remote server returned an error: (404) Not Found.</ErrorDescription> <ErrorDetail> <HttpErrorDetail xmlns="http://schema.microsoft.com/BizTalk/2006/HttpErrorDetails.xsd"> <Headers>Server: Microsoft-IIS/5.1 Date: Wed, 21 Apr 2005 00:27:47 GMT X-Powered-By: ASP.NET Connection: close Content-Type: text/html Content-Length: 67 </Headers> <Body>We could not locate the page you requested. Please check the URL.</Body> </HttpErrorDetail> </ErrorDetail> </ns0:NACK>
Vedere anche
Che cos'è l'adattatore SOAP?
Consigli sulla sicurezza degli adapter SOAP