Condividi tramite


Specificare il corpo del messaggio per gli adapter WCF

È possibile usare la scheda Messaggi negli adattatori WCF per specificare il modo in cui il corpo del messaggio BizTalk viene estratto da un messaggio SOAP in ingresso e il modo in cui il corpo del messaggio BizTalk viene inserito in un messaggio SOAP in uscita.

Specificare il modo in cui il corpo del messaggio BizTalk viene estratto da un messaggio SOAP in arrivo

È possibile controllare il modo in cui il corpo del messaggio BizTalk in ingresso viene creato dai messaggi SOAP in arrivo tramite gli adapter WCF. Le figure seguenti mostrano le schede Messaggi della scheda WCF-NetNamedPipe adattatore di ricezione e invio come esempi.

Scheda Messaggi nelle schede di ricezione WCF

Scheda Messaggi nelle schede di trasmissione WCF

Per specificare come creare il corpo del messaggio BizTalk, selezionare una delle opzioni seguenti nella sezione Corpo del messaggio BizTalk in ingresso nelle figure precedenti:

  • Busta -- intero <soap:Busta>. Usa l'elemento SOAP Envelope di un messaggio in ingresso per creare la parte del corpo del messaggio BizTalk. L'intero messaggio in arrivo diventa il corpo del messaggio BizTalk. Utilizzare questa opzione per creare il corpo del messaggio BizTalk che include tutte le intestazioni.

    Nota

    Le intestazioni SOAP vengono inserite nel contesto del messaggio, ma non vengono alzate automaticamente di livello. La promozione può essere eseguita in un componente della pipeline personalizzata.

  • Corpo : contenuto dell'elemento <soap:Body>. Usa il contenuto dell'elemento SOAP Body di un messaggio in ingresso per creare la parte del corpo del messaggio BizTalk. Se l'elemento Body dispone di più di un elemento figlio, solo il primo elemento diventa la parte corpo del messaggio BizTalk.

  • Percorso - contenuto situato in base al percorso del corpo. Usa l'espressione percorso corpo nella casella di testo Espressione percorso corpo per creare la parte del corpo del messaggio BizTalk. Tale espressione viene valutata in base all'elemento figlio immediato dell'elemento SOAP Body di un messaggio in arrivo. Quando nei messaggi in arrivo sono presenti dati binari, è possibile utilizzare questa opzione per il corpo del messaggio BizTalk, in modo da includere solo i dati binari, senza tag.

    Quando viene selezionata l'opzione Percorso -- contenuto in base al percorso del corpo , la proprietà di codifica Node può essere configurata per specificare il tipo di codifica previsto per il nodo specificato dall'espressione percorso corpo nella casella di testo Espressione percorso corpo . Se l'espressione percorso del corpo corrisponde a più elementi, verrà utilizzato solo il primo elemento corrispondente.

Nota

Per la proprietà dell'espressione del percorso del corpo , sono supportate solo le espressioni XPath appropriate per l'elaborazione solo in avanti di XML. Per altre informazioni sulle espressioni XPath disponibili per questa proprietà, vedere "The Best of Both Worlds: Combina XPath con xmlReader" in https://go.microsoft.com/fwlink/?LinkID=75701.

Se l'opzione Path -- content localizzata in base al percorso del corpo è selezionata e la proprietà Di codifica Node è impostata su String, gli adattatori WCF prevedono che il nodo corrispondente disponga di dati di caratteri codificati UTF-8. Se i messaggi in ingresso includono dati di carattere di escape per i caratteri speciali XML, ad esempio < e >, gli adattatori WCF ripristinano i dati dei caratteri di escape durante la creazione della parte del corpo del messaggio BizTalk. Ad esempio, se il nodo corrispondente ha dati di carattere di escape, <ad esempio FirstName CONTOSO/FirstName, gli adapter WCF creano FirstName CONTOSO</FirstName>> nel corpo del messaggio BizTalk in ingresso.><<>

Se l'opzione Path -- content localizzata in base al percorso del corpo è selezionata e la proprietà Di codifica Node è impostata su Hex o Base64, il nodo corrispondente può avere una sequenza BinHex o Base64 valida. Se il nodo corrispondente ha una sequenza non valida, il client WCF riceve FaultException, viene registrato un messaggio di errore nel registro eventi nel computer BizTalk Server e non viene sospeso alcun messaggio.

Se è selezionata l'opzione Percorso -- contenuto in base al percorso del corpo e la proprietà Di codifica Node è impostata su XML, gli adattatori WCF creano il corpo del messaggio BizTalk con il codice XML esterno del nodo selezionato dall'espressione percorso corpo nella casella di testo Espressione percorso corpo.

Se il nodo corrispondente non dispone di dati codificati come specificato nella proprietà di codifica Node , viene creato un corpo del messaggio BizTalk in ingresso vuoto.

Si supponga ad esempio che l'adapter di trasmissione WCF riceva il messaggio SOAP seguente dai client WCF:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/OrderRefresh</a:Action>
    <a:MessageID>urn:uuid:59e74507-66d0-4d50-be70-c3ec248b6f78</a:MessageID>
    <a:ReplyTo>
       <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessServiceBizTalk</a:To>
  </s:Header>
  <s:Body>
    <Order xmlns="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
     <OrderDetail>
       <CustomerID>CONTOSO</CustomerID>
       <OrderID>00000000</OrderID>
     </OrderDetail>
    </Order>
  </s:Body>
</s:Envelope>

Se si configura la sezione corpo del messaggio BizTalk in ingresso , come illustrato nella tabella seguente, il messaggio SOAP in ingresso diventa la parte del corpo del messaggio BizTalk in ingresso.

Corpo messaggio BizTalk in ingresso Espressione percorso del corpo Codifica nodo
Busta -- intero <soap:Busta> N/D N/D

Se si configura la sezione corpo del messaggio BizTalk , come illustrato nella tabella seguente, gli adapter WCF creano la parte del corpo del messaggio BizTalk in ingresso per contenere solo l'elemento Order nel messaggio SOAP in ingresso precedente.

Corpo messaggio BizTalk in ingresso Espressione percorso del corpo Codifica nodo
Corpo - contenuto dell'elemento <soap:Body> N/D N/D

Se si configura la sezione corpo del messaggio BizTalk , come illustrato nella tabella seguente, gli adattatori WCF prevedono che il nodo in ingresso corrispondente all'espressione del percorso del corpo avrà i dati dei caratteri codificati UTF-8.

Corpo messaggio BizTalk in ingresso Espressione percorso del corpo Codifica nodo
Percorso: contenuto individuato per percorso corpo /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] Stringa

Per il messaggio SOAP precedente, gli adattatori WCF usano i dati dei caratteri, CONTOSO, dell'elemento CustomerID per creare la parte del corpo del messaggio BizTalk in ingresso.

Nota

Non è possibile usare la sintassi abbreviata di XPath, /Order/OrderDetail/CustomerID, per il messaggio SOAP in ingresso precedente. Questo perché la sintassi abbreviata di XPath restituisce il nodo non dichiarato in uno spazio dei nomi e l'elemento CustomerID nel messaggio SOAP precedente viene dichiarato nello http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess spazio dei nomi predefinito.

Se si configura la sezione corpo del messaggio BizTalk , come illustrato nella tabella seguente, l'elemento CustomID nel messaggio SOAP in ingresso precedente deve avere una sequenza BinHex o Base64 valida.

Corpo messaggio BizTalk in ingresso Espressione percorso del corpo Codifica nodo
Percorso: contenuto individuato per percorso corpo /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] Esadecimale o Base64

Se si configura la sezione corpo del messaggio BizTalk , come illustrato nella tabella seguente, gli adapter WCF creano il corpo del messaggio BizTalk in ingresso per il messaggio SOAP in ingresso precedente, come illustrato nel codice dopo la tabella.

Corpo messaggio BizTalk in ingresso Espressione percorso del corpo Codifica nodo
Percorso: contenuto individuato per percorso corpo /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] XML
<CustomerID xmlns="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">CONTOSO</CustomerID>

Specificare l'origine del corpo del messaggio WCF in uscita

È possibile controllare il modo in cui il corpo del messaggio WCF in uscita viene creato da un corpo del messaggio BizTalk per la trasmissione tramite adapter WCF. Per specificare il modo in cui il corpo del messaggio BizTalk viene inserito nel corpo del messaggio WCF in uscita, è possibile usare una delle opzioni seguenti nella sezione Corpo del messaggio WCF in uscita nella scheda Messaggi , come illustrato nelle figure della sezione precedente:

  • Corpo -- Corpo del corpo del messaggio di risposta BizTalk. Usa la parte del corpo del messaggio BizTalk per creare il contenuto dell'elemento SOAP Body per un messaggio in uscita. Il corpo del messaggio BizTalk in uscita diventa il corpo del messaggio SOAP in uscita.

  • Modello : contenuto specificato dal modello. Usa il modello fornito nella casella di testo XML per creare il contenuto dell'elemento SOAP Body per un messaggio in uscita. Gli adattatori WCF con corpo - Corpo del corpo del messaggio di risposta BizTalk (valore predefinito) non consentono l'invio di messaggi non XML, ad esempio dati di carattere e immagini bitmap. È possibile usare il contenuto modello specificato dall'opzione modello per gli adattatori WCF per inviare messaggi non XML codificati in base64, esadecimale o stringa.

    Quando viene selezionata l'opzione Modello - contenuto specificato dall'opzione modello , è necessario specificare un elemento XML modello arbitrario nella casella di testo WCF in uscita - XML . L'elemento XML modello deve contenere l'elemento bts-msg-body seguente una sola volta e una sola volta a meno che l'elemento XML del modello non sia lasciato vuoto:

<bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="[base64|hex|string|xml]"/>

Gli adapter WCF codificano il corpo del messaggio BizTalk in base all'attributo di codifica nel modello XML e quindi sostituire l'elemento bts-msg-body con il corpo del messaggio BizTalk codificato durante la creazione di messaggi WCF in uscita. Se il corpo del messaggio WCF in uscita - casella di testo XML è vuoto, gli adattatori WCF codificano il corpo del messaggio BizTalk in Base64 e quindi posizionare la sequenza Base64 nel corpo del messaggio SOAP in uscita.

Se l'attributo di codifica nel modello XML è impostato su stringa, gli adapter WCF codificano la parte del corpo del messaggio BizTalk come dati dei caratteri codificati UTF-8, in cui i caratteri speciali XML, ad esempio < e > vengono escape.

Se l'attributo di codifica nel modello XML è impostato su base64 o esadecimale, gli adattatori WCF codificano la parte del corpo del messaggio BizTalk come sequenza BinHex o Base64.

Se l'attributo di codifica nel modello XML è impostato su xml, gli adattatori WCF sostituiscono l'elemento bts-msg-body con il corpo del messaggio BizTalk in uscita per creare il messaggio WCF in uscita.

Si supponga, ad esempio, che gli adapter WCF debbano inviare la parte seguente del corpo del messaggio BizTalk ai client WCF:

<ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
  <ns0:OrderDetail>
    <ns0:CustomerID>CONTOSO</ns0:CustomerID>
    <ns0:OrderID>01A2c</ns0:OrderID>
  </ns0:OrderDetail>
</ns0:Order>

Se si configura la sezione corpo del messaggio WCF in uscita , come illustrato nella tabella seguente, gli adattatori WCF creano i messaggi WCF in uscita, come illustrato nel codice dopo la tabella.

Corpo messaggio WCF in uscita XML
Corpo: corpo del messaggio di risposta BizTalk N/D
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:Action>
    <a:MessageID>urn:uuid:6a706a54-c4f5-4767-909d-a992c7c26dba</a:MessageID>
    <a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessService</a:To>
  </s:Header>
  <s:Body>
    <ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
  <ns0:OrderDetail>
    <ns0:CustomerID>CONTOSO</ns0:CustomerID>
    <ns0:OrderID>01A2c</ns0:OrderID>
  </ns0:OrderDetail>
</ns0:Order>
  </s:Body>
</s:Envelope>

Se si configura la sezione corpo del messaggio WCF in uscita , come illustrato nella tabella seguente, gli adattatori WCF creano i messaggi WCF in uscita, come illustrato nel codice dopo la tabella.

Corpo messaggio WCF in uscita XML
Corpo: corpo del messaggio di risposta BizTalk <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="string"/></Book>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:Action>
    <a:MessageID>urn:uuid:05dde292-eedd-467e-b0d2-f1b8f0757410</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessService</a:To>
  </s:Header>
  <s:Body>
    <Book><ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">  <ns0:OrderDetail>    <ns0:CustomerID>CONTOSO</ns0:CustomerID>    <ns0:OrderID> 01A2c</ns0:OrderID>  </ns0:OrderDetail></ns0:Order>
    </Book>
  </s:Body>
</s:Envelope>

Se si configura la sezione Corpo del messaggio WCF in uscita , come illustrato nella tabella seguente, gli adapter WCF creano i messaggi WCF in uscita, come illustrato nel codice dopo la tabella.

Corpo messaggio WCF in uscita XML
Corpo: corpo del messaggio di risposta BizTalk <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="base64"/></Book>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://ww
w.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe
/OrderProcess/IOrderProcess/Request</a:Action>
    <a:MessageID>urn:uuid:cb3cac6d-a542-4a90-bad8-cdbfa8251112</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessSer
vice</a:To>
  </s:Header>
  <s:Body>
    <Book>77u/PG5zMDpPcmRlciB4bWxuczpuczA9Imh0dHA6Ly9NaWNyb3NvZnQuU2FtcGxlcy5CaX
pUYWxrLk5ldE5hbWVkUGlwZS9PcmRlclByb2Nlc3MiPg0KICA8bnMwOk9yZGVyRGV0YWlsPg0KICAgID
xuczA6Q3VzdG9tZXJJRD5DT05UT1NPPC9uczA6Q3VzdG9tZXJJRD4NCiAgICA8bnMwOk9yZGVySUQ+MD
FBMmM8L25zMDpPcmRlcklEPg0KICA8L25zMDpPcmRlckRldGFpbD4NCjwvbnMwOk9yZGVyPg==</Book
>
  </s:Body>
</s:Envelope>

Se si configura la sezione Corpo del messaggio WCF in uscita , come illustrato nella tabella seguente, gli adapter WCF creano i messaggi WCF in uscita, come illustrato nel codice dopo la tabella.

Corpo messaggio WCF in uscita XML
Corpo: corpo del messaggio di risposta BizTalk <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="xml"/></Book>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:A
ction>
    <a:MessageID>{513C123C-0600-4A1C-BEE2-EF83E0EFEB15}</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessServiceBizTalk</a:To>
  </s:Header>
  <s:Body>
    <Book>
      <ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
  <ns0:OrderDetail>
    <ns0:CustomerID>CustomerID_0</ns0:CustomerID>
    <ns0:OrderID>OrderID_0</ns0:OrderID>
  </ns0:OrderDetail>
</ns0:Order>
    </Book>
  </s:Body>
</s:Envelope>