Intestazioni SOAP con servizi WCF pubblicati
Gli adapter di ricezione WCF possono copiare tutti i valori di intestazione SOAP nei messaggi in ingresso nella proprietà InboundHeaders oppure possono scrivere o promuovere valori specificati nel contesto del messaggio BizTalk. Gli adapter possono gestire intestazioni SOAP personalizzate e standard utilizzate dall'infrastruttura WCF, ad esempio WS-Addressing, WS-Security e WS-AtomicTransaction. La proprietà contesto InboundHeaders si trova nello spazio dei nomi http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties
di destinazione e contiene rappresentazioni stringa dei valori di intestazione SOAP nei messaggi in ingresso.
Nota
Se si intende alzare di livello i valori delle intestazioni SOAP specificati, è necessario che il progetto BizTalk contenga uno schema proprietà distribuito corrispondente ai valori di cui alzare il livello.
Nota
Le proprietà alzate di livello non possono superare i 256 caratteri.
I dati XML seguenti mostrano un esempio della rappresentazione stringa delle intestazioni SOAP per la proprietà InboundHeaders . Questi dati provengono dal client e vengono inviati all'indirizzo di ricezione BizTalk.
<headers>
<a:Action s:mustUnderstand="1" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">Operation_1</a:Action>
<SalesAgent xmlns="Microsoft.Samples.BizTalk.WCF.CustomSoapHeaderPipeline">Contoso</SalesAgent>
<a:MessageID xmlns:a="http://www.w3.org/2005/08/addressing">urn:uuid:26e6720f-5a82-4ef2-b597-6ef077bab92e</a:MessageID>
<a:ReplyTo xmlns:a="http://www.w3.org/2005/08/addressing"><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo>
<a:To s:mustUnderstand="1" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">net.tcp://localhost:9990/NetTcpOrderProcess</a:To>
</headers>
Per scrivere o alzare di livello i valori delle intestazioni SOAP nel contesto dei messaggi BizTalk, è necessario inserire nel messaggio WCF un insieme di copie di valori costituite dal nomi e spazi dei nomi di proprietà in modo che gli adapter WCF riconoscano che è necessario scrivere o alzare di livello i valori delle intestazioni. Per scrivere o alzare di livello i valori delle intestazioni SOAP nel contesto del messaggio BizTalk, gli adapter WCF dovranno trovare le proprietà di messaggio descritte di seguito nei messaggi WCF:
Per promuovere i valori di intestazione SOAP nel contesto dei messaggi BizTalk, gli adapter WCF cercano la coppia di chiavi
http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote
e valore List<KeyValuePair<XmlQualifiedName, oggetto>> .Usando questa coppia, gli adattatori WCF accettano lo spazio dei nomi, il nome e il valore dall'oggetto XmlQualifiedName e li usano per promuovere i valori di intestazione.
Per scrivere ma non promuovere i valori di intestazione SOAP nel contesto del messaggio BizTalk, gli adattatori WCF cercano la coppia di chiavi
http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext
e valore List<KeyValuePair<XmlQualifiedName, oggetto>> .Utilizzando questa coppia, scrivono quindi i valori nel contesto del messaggio.
Nel codice seguente viene illustrato come scrivere o alzare di livello i valori delle intestazioni SOAP nel contesto dei messaggi BizTalk:
const string PropertiesToPromoteKey="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote";
const string PropertiesToWriteKey="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext";
XmlQualifiedName PropName1=new XmlQualifiedName("Destination", "http://tempuri.org/2007/sample-properties");
XmlQualifiedName PropName2=new XmlQualifiedName("Source", "http://tempuri.org/2007/sample-properties");
//Create a List of KeyValuePairs that indicate properties to be promoted to BizTalk message context.
//A Property Schema must be deployed and string values have a limit of 256 characters
List<KeyValuePair<XmlQualifiedName, object>> promoteProps=new List<KeyValuePair<XmlQualifiedName, object>>();
promoteProps.Add(new KeyValuePair<XmlQualifiedName, object>(PropName1, "Property value"));
wcfMessage.Properties[PropertiesToPromoteKey]=promoteProps;
//Create a List of KeyValuePairs that indicate properties to be written to BizTalk message context
List<KeyValuePair<XmlQualifiedName, object>> writeProps=new List<KeyValuePair<XmlQualifiedName, object>>();
writeProps.Add(new KeyValuePair<XmlQualifiedName, object>(PropName2, "Property value"));
wcfMessage.Properties[PropertiesToWriteKey]=writeProps;
La Pubblicazione guidata servizio WCF BizTalk non include definizioni delle intestazioni SOAP personalizzate nei metadati generati. Per pubblicare metadati per servizi WCF che utilizzano intestazioni SOAP personalizzate, è necessario creare manualmente un file WSDL (Web Services Description Language). È possibile usare l'attributo externalMetadataLocation dell'elemento <serviceMetadata> nel file Web.config generato dalla procedura guidata per specificare il percorso del file WSDL. Il file WSDL viene restituito all'utente in risposta a richieste di WSDL e Metadata Exchange (MEX) al posto del file WSDL generato automaticamente.
Nei dati XML seguenti viene illustrato un esempio di una parte del file WSDL in cui si definiscono le intestazioni SOAP personalizzate:
<wsdl:operation name="Request">
<soap12:operation soapAction="http://Microsoft.Samples.BizTalk.NetTcpAdapter/OrderProcess/IOrderProcess/Request" style="document" />
<wsdl:input name="Order">
<soap12:header message="i0:Order_Headers" part="SalesAgent" use="literal" />
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output name="OrderConfirmation">
<soap12:header message="i0:OrderConfirmation_Headers" part="PaymentAgent" use="literal" />
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
Contenuto della sezione
Accesso alle intestazioni SOAP nei messaggi WCF con orchestrazioni
Accesso alle intestazioni SOAP nei messaggi WCF con componenti della pipeline
Vedere anche
Schema e proprietà delle schede WCF con intestazioni SOAP con servizi WCF usati