Debug degli errori di runtime delle orchestrazioni
In questa sezione è contenuta una serie di domande e risposte studiate per facilitare la risoluzione di problemi di runtime delle orchestrazioni.
Perché si verificano errori di sottoscrizione a intermittenza durante l'invio a un'orchestrazione figlio appena avviata da quella padre?
L'errore di impossibilità di trovare la sottoscrizione è la conseguenza di una race condition, che si verifica quando il risultato di un processo dipende dal particolare ordine in cui avviene il processo. In questo caso, tale condizione si verifica quando l'orchestrazione figlio non è stata avviata in tempo per ricevere il messaggio inviato dall'orchestrazione padre.
Per evitare questo problema, si può fare in modo che l'orchestrazione figlio, una volta avviata e pronta a ricevere un messaggio, invii un messaggio all'orchestrazione padre. In questo modo, l'orchestrazione padre che ha avviato l'orchestrazione figlio è informata della presenza di un ricevitore prima di inviare un messaggio.
Perché si verificano errori quando si collega una porta di trasmissione dinamica a una porta logica?
Una porta dinamica non è progettata per ereditare tutti gli attributi e tutte le caratteristiche della porta ad essa assegnata, ma ottiene solo un indirizzo e non eredita le altre informazioni associate alla porta logica.
Ad esempio, se si collega una porta di trasmissione dinamica a una porta logica con Notifica di recapito = Trasmesso, il runtime non consegnerà una notifica di recapito. Il runtime XLANGs resta in attesa di una notifica di recapito solo se la porta è stata effettivamente configurata in questo modo staticamente.
Nota
In XLANGs, le porte si comporteranno solo nel modo in cui sono state configurate staticamente.
Quando si tenta di eseguire l'applicazione dopo la distribuzione di un'orchestrazione con componenti personalizzati, perché si verifica un errore indicante che è impossibile trovare un determinato file o assembly oppure una delle sue dipendenze?
Questo errore di solito significa che il motore di orchestrazione BizTalk non è riuscito a individuare il componente personalizzato. È necessario installare tutti gli assembly inclusi in un'applicazione BizTalk nella Global Assembly Cache del computer in cui risiede l'applicazione.
Quando si invia un documento a un servizio Web tramite un'orchestrazione, si verifica un errore indicante che la proprietà di contesto AssemblyName non è valida.
Problema
L'invio di un documento a un servizio Web tramite un'orchestrazione genera un errore indicante che la proprietà di contesto AssemblyName non è valida.
Causa
L'applicazione BizTalk era stata originariamente progettata utilizzando un approccio di "messaggistica" senza un'orchestrazione. In questo tipo di soluzione, per collegare la porta di ricezione e la porta di trasmissione viene utilizzato un filtro sulla porta di trasmissione in modo che il documento passi a tale porta al momento della ricezione. In seguito, la soluzione è stata modificata includendo un'orchestrazione associata alla porta di trasmissione.
Risoluzione
Rimuovere il filtro sulla porta di trasmissione. Se si applica un filtro alla porta di trasmissione associata a un'orchestrazione, i messaggi spesso ignorano l'orchestrazione e causano l'errore di proprietà di contesto.
In presenza di un messaggio MIME multiparte in un'orchestrazione, si verifica un'eccezione "WrongBodyPartException"
Problema
La ricezione di un messaggio MIME a più parti in un'orchestrazione genera un'eccezione WrongBodyPartException .
Causa
Questo errore può verificarsi quando l'ordine delle parti non è stato specificato correttamente o quando i messaggi non sono conformi alle posizioni delle parti specificate. Ad esempio, se si specifica che la terza parte è una parte corpo ma i messaggi arrivano con una parte intestazione alla terza posizione.
Risoluzione
Verificare che l'impostazione dell'indice della parte corpo sia corretta e quindi assicurarsi che tutti i messaggi che arrivano attraverso l'adapter siano coerenti con tale impostazione. Per esaminare il contenuto dei messaggi MIME che presentano errori all'interno di un'orchestrazione, arrestare l'orchestrazione (mantenendola integrata); in questo modo verrà imposta la pubblicazione del messaggio e sarà possibile esaminarlo mediante la Console di amministrazione e verificare l'ordine delle parti.
Impossibile trovare una parte di un messaggio MIME multiparte
Problema
Tenta di recuperare una parte del messaggio MIME con un valore di indice maggiore di 0 restituisce nel runtime BizTalk Server che genera un errore simile a "non è possibile trovare un messaggio in più parti con index = <value>".
Causa
Le cause più comuni di questo errore sono le seguenti:
Il messaggio MIME ha meno parti del previsto.
Non è possibile analizzare completamente il messaggio MIME.
Risoluzione
Questo problema può essere risolto assicurandosi che il codice recuperi solo parti di messaggio che rientrano nell'intervallo previsto dall'origine del messaggio. Nel caso di un problema di analisi, è necessario verificare che il messaggio MIME originale sia corretto dal punto di vista strutturale e adeguatamente costruito. Se si prevedono problemi di analisi occasionali, accertarsi che l'orchestrazione disponga di gestori di eccezioni appropriati.
Viene visualizzato un errore che indica che l'adapter di trasmissione FILE non è in grado di aprire il file per operazioni di scrittura quando si esegue la trasmissione tramite una porta di trasmissione dinamica
Problema
Viene visualizzato un errore "The FILE send adapter cannot open file for writing" (Impossibile aprire il nome< file> per la scrittura) nel registro eventi BizTalk Server quando si invia tramite una porta di trasmissione dinamica.
Questo problema si verifica quando bts. La proprietà OutBoundTransportLocation è definita in un'espressione di orchestrazione e viene specificato il trasporto file, ad esempio le espressioni seguenti causeranno questo errore in fase di esecuzione:
Message2=Message1;
Message2(BTS.OutboundTransportLocation) = "file:///c:/test/out";
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);
oppure
Message2=Message1;
Message2(BTS.OutboundTransportLocation) = "file://mymachine/test/out";
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);
Causa
Questo problema si verifica perché in fase di esecuzione il motore di orchestrazione rimuove il testo "file://" dall'URL specificato. Negli esempi sopra riportati, "file:///c:/test/out" viene pertanto restituito come \c:\test\out e "file://mymachine/test/out" come mymachine\test\out.
Risoluzione
Quando si specifica l'URL per BTS. Proprietà OutBoundTransportLocation in un'espressione, aggiungere o rimuovere caratteri "/" in base alle esigenze. Usando gli esempi precedenti a BTS. La proprietà OutBoundTransportLocation deve essere definita come "file://c:/test/out", che restituisce c:\test\out o "file:////mymachine/test/out", che restituisce \\mymachine\test\out.