Risoluzione dello schema nei componenti della pipeline
I componenti dell'assembler e del disassembler della pipeline utilizzano gli schemi XSD per l'elaborazione dei messaggi. Gli schemi contengono informazioni quali l'elenco di proprietà innalzate di livello, i campi differenzianti, annotazioni per i messaggi di file flat e annotazioni per le buste XML.
I componenti standard dell'assembler e del disassembler supportano il recupero degli schemi distribuiti mediante il nome del tipo dello schema e il tipo del messaggio. Alcuni componenti eseguono il recupero mediante sia il nome del tipo dello schema che il tipo del messaggio, mentre altri, ad esempio il disassembler del file flat, eseguono il recupero solo in base al tipo dello schema.
I componenti della pipeline che ricevono messaggi XML determinano il tipo del messaggio attraverso l'esame dell'elemento principale del messaggio e dello spazio dei nomi. Ad esempio, il tipo di messaggio per il codice XML seguente è http://MyDocument.org#MyDocument
.
<ns0:MyDocument xmlns:ns0="http://MyDocument.org">
</ns0:MyDocument>
Se uno schema non ha uno spazio dei nomi definito per questo, il tipo di messaggio è "<rootNode>". Se ad esempio per l'XML dell'esempio precedente non fosse stato definito uno spazio dei nomi, il tipo del messaggio sarebbe stato "MyDocument".
I componenti standard della pipeline utilizzano il tipo del messaggio per recuperare lo schema appropriato dal database. Le pipeline di ricezione e di trasmissione XML predefinite determinano lo schema da caricare utilizzando il tipo del messaggio rilevato in modo dinamico in fase di esecuzione dal contenuto XML del messaggio, a meno che il componente della pipeline sia impostato per consentire messaggi non riconosciuti. Il disassembler XML è in grado di rimuovere la busta del messaggio utilizzando questo meccanismo, ma l'assembler XML non può creare una busta per un messaggio in uscita se non conosce quale schema della busta utilizzare.
È possibile specificare lo schema della busta nelle proprietà di configurazione per l'assembler XML dall'interno di Progettazione pipeline.
Modalità di risoluzione degli schemi
Nell'ipotesi che gli schemi non vengano specificati direttamente nel disassembler XML, essi verranno risolti nel modo seguente:
Prima di tutto, viene eseguita una ricerca non qualificato sugli schemi distribuiti usando il nome e lo spazio dei nomi del nodo radice , ad esempio
http://MyNamespace#MyRoot
. Se viene rilevata una corrispondenza univoca, lo schema è risolto. Se vengono rilevate più corrispondenze diverse solo per il numero di versione di cui una sola sia attiva, viene utilizzata tale versione e lo schema è risolto. Se lo stesso schema è attivo in più applicazioni, verranno rilevati più schemi attivi e la ricerca proseguirà con il passaggio 2 seguente.Se il passaggio 1 non riesce a risolvere più corrispondenze, la ricerca è qualificata dall'assembly in cui viene eseguita la pipeline. Se viene trovato uno schema univoco all'interno dello stesso assembly in cui viene eseguita la pipeline, lo schema viene risolto.
Se continuano a non esservi corrispondenze, per risolvere lo schema viene utilizzato il server di pubblicazione. La ricerca viene circoscritta con l'utilizzo del nodo radice, dello spazio dei nomi e del token di chiave pubblica. Se con questa ricerca viene trovato uno schema univoco, lo schema è risolto.
Impossibile risolvere lo schema. Viene generato un errore in cui è segnalata l'impossibilità di trovare uno schema unico.
Per altre considerazioni, tra cui l'effetto delle regole di confronto SQL Server e la distinzione tra maiuscole e minuscole sulla risoluzione dello schema, vedere Gestione spazi dei nomi.
Per creare una busta nell'assembler XML o un'intestazione e una pagina di riepilogo nell'assembler del file flat, può essere necessario eseguire una delle operazioni seguenti:
Creare una pipeline di trasmissione personalizzata e specificare gli schemi per la busta nelle proprietà di configurazione per l'assembler XML. Tale operazione può essere eseguita dall'interno di Progettazione orchestrazioni.
Nella Console di amministrazione BizTalk Server specificare XMLTransmit per la proprietà della pipeline di trasmissione su una porta di trasmissione. Fare clic sul pulsante con i puntini di sospensione per configurare le proprietà della pipeline e specificare lo schema per la busta nella proprietà EnvelopeDocSpecNames.
La risoluzione dello schema in base al tipo del messaggio potrebbe non funzionare se nel database vengono distribuite in modo intenzionale o accidentale diverse versioni dello stesso schema, ad esempio in una distribuzione affiancata oppure qualora più scenari non presentino tipi del messaggio univoci. Se la risoluzione dello schema in base al tipo del messaggio non riesce, al registro eventi verrà aggiunto un errore di "ambiguità di schema". Per assicurarsi che la risoluzione dello schema in base al tipo del messaggio riesca, eseguire una delle operazioni seguenti:
Definire gli schemi nello stesso progetto BizTalk della pipeline personalizzata.
Firmare l'assembly con gli schemi con la stessa chiave utilizzata per firmare l'assembly contenente le pipeline.
Specificare in modo esplicito gli schemi nei componenti della pipeline (i nomi dei tipi dei messaggi dovrebbero essere univoci all'interno del database di gestione BizTalk).
Importante
Quando gli schemi nello stesso assembly condividono un tipo del messaggio, non è necessario includere gli schemi nello stesso assembly del componente della pipeline a causa delle limitazioni della risoluzione dell'ambiguità; è invece opportuno fare riferimento agli schemi esterni all'assembly del componente della pipeline. La risoluzione dell'ambiguità non funziona quando gli schemi e i componenti della pipeline sono nello stesso assembly, anche se i nomi dei tipi degli schemi sono specificati in modo esplicito nei componenti delle pipeline personalizzate.
Nota
I componenti della pipeline personalizzati che usano IPipelineContext per ottenere schemi distribuiti devono ottenere schemi per tipo di schema solo se il nome del tipo di schema non è specificato per il componente in fase di esecuzione e ottenere schemi in base al tipo di messaggio solo se le informazioni sul tipo di schema non sono disponibili quando il componente viene eseguito.