Condividi tramite


Problemi noti relativi agli adapter WCF

Questo argomento descrive i problemi noti per gli adattatori WCF inclusi in BizTalk Server.

I messaggi in cui il marshalling SOAP in ingresso non viene completato non vengono sospesi negli adapter di ricezione WCF

Quando un messaggio viene ricevuto da un adapter di ricezione WCF, l'adapter crea un messaggio BizTalk dal messaggio SOAP in ingresso e lo passa al proxy di trasporto, gestito da Gestione endpoint. Se l'adapter non riesce a leggere la busta e il corpo SOAP durante la creazione del messaggio BizTalk, il messaggio non viene sospeso poiché l'adapter utilizza un lettore veloce, non memorizzato nella cache e di tipo forward-only per accedere al messaggio SOAP.

Controllare le informazioni relative al messaggio non riuscito nel registro eventi. Ad esempio, è possibile usare un'espressione percorso corpo nella scheda Messaggi nella finestra di dialogo Proprietà trasporto adattatore WCF per specificare come creare il corpo del messaggio BizTalk in ingresso da un messaggio SOAP in ingresso tramite l'adapter WCF. Quando viene fornita un'espressione del percorso del corpo non valida per il messaggio SOAP in ingresso nella scheda Messaggi , l'adapter non riesce a creare il messaggio BizTalk e non può sospendere il messaggio in ingresso. Per altre informazioni su come usare l'espressione del percorso del corpo nella scheda Messaggi , vedere Specifica del corpo del messaggio per gli adapter WCF.

Nella figura seguente viene illustrata la scheda Messaggi in cui è possibile specificare come creare messaggi BizTalk in ingresso dai messaggi SOAP in ingresso.

I messaggi in cui il marshalling SOAP in ingresso non viene completato non vengono sospesi negli adapter di trasmissione WCF

La porta di trasmissione sollecitazione-risposta WCF può ricevere un messaggio WCF come messaggio di risposta. Quando il messaggio viene ricevuto dall'adapter di trasmissione WCF, l'adapter WCF crea il messaggio BizTalk dal messaggio SOAP in ingresso e lo passa al proxy di trasporto, gestito da Gestione endpoint. Se l'adapter non riesce a leggere la busta e il corpo SOAP durante la creazione del messaggio BizTalk, il messaggio non viene sospeso poiché l'adapter utilizza un lettore veloce, non memorizzato nella cache e di tipo forward-only per accedere al messaggio SOAP.

Controllare le informazioni relative al messaggio non riuscito nel registro eventi. Ad esempio, è possibile usare un'espressione XPath nella scheda Messaggi nella finestra di dialogo Proprietà trasporto adattatore WCF per specificare come creare il corpo del messaggio BizTalk in ingresso da un messaggio SOAP in ingresso tramite l'adapter WCF. Quando viene fornita un'espressione XPath non valida per il messaggio SOAP in ingresso nella scheda Messaggi , l'adapter non riesce a creare il messaggio BizTalk e non può sospendere il messaggio in ingresso. Per altre informazioni su come usare l'espressione XPath nella scheda Messaggi , vedere Specifica del corpo del messaggio per gli adapter WCF.

La figura seguente mostra la scheda Messaggi della scheda WCF-NetNamedPipe adapter di invio come esempio.

Scheda Messaggi nelle schede di trasmissione WCF

Quando si utilizza OneWayBindingElement in un trasporto bidirezionale con binding personalizzato in indirizzi di ricezione WCF non transazionali, potrebbe verificarsi una perdita di messaggi

In una comunicazione bidirezionale, gli adapter WCF continuano a restituire la risposta finché i messaggi persistono nel database MessageBox. Tuttavia, l'uso di OneWayBindingElement genera una risposta fittizia immediatamente prima di inviare il messaggio ricevuto all'adapter WCF. Pertanto, se si configura un'associazione personalizzata con oneWayBindingElement nello stack di canali per il trasporto bidirezionale in posizioni di ricezione non transazionali, i messaggi possono essere persi perché gli adattatori WCF elaborano i messaggi ricevuti nella moda unidirezionale.

Per la costruzione dei binding vengono utilizzati i valori predefiniti degli attributi ReaderQuotas nelle finestre di dialogo Proprietà del trasporto WCF-Custom e Proprietà del trasporto WCF-CustomIsolated

Nelle finestre di dialogo WCF-Custom e WCF-CustomIsolated proprietà di trasporto vengono visualizzati i valori degli attributi ReaderQuotas come zero. Per la costruzione dei binding, tuttavia, vengono utilizzati i valori seguenti:

Attributo Descrizione Valore
maxArrayLength Numero intero positivo che specifica la lunghezza massima consentita per le matrici. 16384
maxBytesPerRead Numero intero positivo che specifica il numero massimo di byte restituiti per lettura consentito. 4096
maxDepth Numero intero positivo che specifica la profondità massima dei nodi nidificati per lettura. 32
maxNameTableCharCount Numero intero positivo che specifica il numero massimo di caratteri consentiti in un nome di tabella. 16384
maxStringContentLength Numero intero positivo che specifica il numero massimo di caratteri consentiti nel contenuto di un elemento XML. 8192

Se si modifica il tipo di adapter WCF mantenendo lo stesso indirizzo, è possibile che gli indirizzi di ricezione WCF vengano disabilitati

Se si modifica il tipo di adapter WCF, ad esempio da WCF-NetTcp a WCF-Custom con binding NetTcp, senza modificare l'indirizzo, è possibile che l'indirizzo di ricezione venga disabilitato a causa di un problema di memorizzazione nella cache in Gestione endpoint. Per risolvere il problema, è possibile effettuare una delle operazioni seguenti:

  • Riavviare il servizio BTSNTSvc.

  • Modificare l'indirizzo URI e salvarlo, quindi ripristinare l'indirizzo URI originale e salvarlo nuovamente.

L'azione WCF impostata nell'orchestrazione non esegue l'override dell'azione impostata nella porta di trasmissione statica

Se si imposta WCF. Proprietà contesto azione nell'orchestrazione, è necessario lasciare vuoto il campo Azione nella finestra di dialogo Proprietà trasporto adattatore WCF. Se si specifica anche un'azione nella porta di trasmissione statica, WCF. La proprietà contesto azione impostata nell'orchestrazione verrà sostituita dal valore impostato nella porta di invio statica.

La propagazione di un messaggio di errore non è supportata nella trasmissione transazionale

L'opzione Propaga messaggio di errore nelle porte di invio di richieste di risposta consente di instradare i messaggi che hanno esito negativo nell'elaborazione in uscita a un'applicazione di sottoscrizione. Tuttavia, se la casella di controllo Abilita transazioni è selezionata anche nella finestra di dialogo Proprietà trasporto e la transazione viene interrotta o non utilizzabile quando arriva la risposta di errore all'adapter, non sarà possibile propagare i messaggi di errore a qualsiasi applicazione di sottoscrizione

Durante il failover dei cluster il gruppo di risorse cluster MSMQ deve essere riavviato prima del gruppo di risorse cluster dell'host BizTalk

In uno scenario di cluster di failover, durante un failover è necessario riavviare il gruppo di risorse cluster MSMQ prima del gruppo di risorse cluster dell'host BizTalk, in modo da evitare che gli indirizzi di ricezione MSMQ vengano disabilitati. A tale scopo, è possibile rendere il gruppo di risorse cluster dell'host BizTalk dipendente dal gruppo di risorse cluster MSMQ affinché quest'ultimo venga avviato per primo. In alternativa, è possibile riavviare il gruppo di risorse cluster dell'host BizTalk.

Quando si inviano messaggi a un servizio WCF che utilizza wsFederationHttpBinding nell'endpoint, viene generato un errore

Viene visualizzato un messaggio di errore simile al seguente:

The adapter failed to transmit message going to send port "MySendPort" with URL "http://localohost/MywsFedHttp". It will be retransmitted after the retry interval specified for this Send Port. Details:"The channel is configured to use interactive initializer 'System.ServiceModel.Security.InfocardInteractiveChannelInitializer', but the channel was Opened without calling DisplayInitializationUI.  Call DisplayInitializationUI before calling Open or other methods on this channel.".

Questo comportamento dipende dalla progettazione. Gli adapter WCF non possono inviare messaggi ai servizi WCF che usano wsFederationHttpBinding negli endpoint.

Utilizzo guidato servizio WCF BizTalk non consente di selezionare tipi di messaggi o di porte da WSDL

In Utilizzo guidato servizio WCF BizTalk non è possibile selezionare tipi di messaggi o di porte da WSDL durante l'importazione dei servizi WCF. Per superare questa limitazione, è possibile utilizzare il codice seguente per ottenere gli schemi e quindi aggiungere gli schemi desiderati ai progetti BizTalk:

svcutil.exe /t:metadata http://service/metadataendpoint

Utilizzo guidato servizio WCF BizTalk non supporta la combinazione di operazioni unidirezionali e richiesta-risposta

Utilizzo guidato servizio WCF BizTalk non consente di importare tipi di porte che utilizzano una combinazione di operazioni unidirezionali e richiesta-risposta. Per risolvere il problema, è possibile utilizzare lo strumento ServiceModel Metadata Utility Tool per generare i tipi di porta.

Utilizzo guidato servizio WCF BizTalk non consente l'impostazione di credenziali di certificato durante il recupero di WSDL

In Utilizzo guidato servizio WCF BizTalk non è possibile impostare credenziali di certificato durante il recupero di WSDL. Per risolvere questo problema, è possibile usare lo strumento utilità metadati ServiceModel per generare i file WSDL e XSD dai servizi WCF che si desidera usare con le credenziali del certificato impostate nel file svcutil.exe.config e quindi importarli nella Procedura guidata Utilizzo guidato del servizio WCF BizTalk scegliendo l'opzione File di metadati (WSDL e XSD) nella pagina Origine metadati .

Gli adapter WCF non supportano le operazioni unidirezionali

Viene visualizzato un messaggio di errore simile al seguente quando si usano i servizi WCF pubblicati con gli adattatori WCF (ad eccezione dell'adattatore di ricezione WCF-NetMsmq) se la proprietà IsOneWay è impostata su true sul lato client. Ciò avviene perché la proprietà System.ServiceModel.OperationContractAttribute.IsOneWay dei servizi WCF pubblicati con gli adattatori WCF (ad eccezione dei servizi pubblicati con l'adattatore di ricezione WCF-NetMsmq) è impostata su false anche per le posizioni di ricezione unidirezionale.

The channel received an unexpected input message while closing. Your Channel.Close() calls are not synchronized.

Viene visualizzato un messaggio di errore simile al seguente quando si usano i servizi WCF specificati con la proprietà IsOneWay impostata su true. I messaggi inviati da BizTalk Server verranno sospesi e ripresi.

The request operation at net.tcp://localhost:8088/MyService/tcp did not receive a reply within timeout 00:01:00.

Quando si inviano messaggi a code MSMQ non transazionali mediante binding WCF NetMsmq, potrebbe verificarsi una perdita di memoria

Quando si inviano messaggi a code MSMQ non transazionali mediante binding WCF NetMsmq, potrebbe verificarsi una perdita di memoria nel servizio NT BizTalk. Questo problema può verificarsi quando si inviano messaggi a una coda MSMQ non transazionale utilizzando il trasporto WCF-NetMsmq o il binding netMsmqBinding con il trasporto WCF-Custom.

Per risolvere il problema, è necessario installare l'hotfix di .NET Framework 3.0 descritto nell'articolo della Knowledge Base 936512 in https://go.microsoft.com/fwlink/?LinkId=92962. Per completare l'installazione dell'hotfix non è necessario riavviare il sistema ma soltanto il servizio NT BizTalk che ospita le porte di trasmissione che utilizzano il binding WCF-NetMsmq.

È possibile che venga generata un'eccezione durante la comunicazione con i server Web Apache tramite l'adapter WCF-BasicHttp

Quando si utilizza l'adapter WCF-BasicHttp in modalità Sicurezza trasporto per comunicare con un server Web Apache, è possibile che venga generata un'eccezione simile a quelle riportate di seguito:

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send.
System.IO.IOException: Unable to write data to the transport connection: An established connection was aborted by the software in your host machine. System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine

Per risolvere il problema, è necessario sostituire l'adapter WCF-Custom all'adapter WCF-BasicHttp per comunicare con i server Web Apache, eseguendo la procedura seguente:

  1. Creare una porta di invio e impostare il tipo di trasporto su WCF-Custom.

  2. Nella finestra di dialogo Proprietà trasporto personalizzate WCF selezionare customBinding nell'elenco a discesa Tipo di associazione.

  3. In CustomeBindingElement fare clic con il pulsante destro del mouse su httpTransport e quindi scegliere Rimuovi estensione.

  4. Fare clic con il pulsante destro del mouse su CustomeBindingElement e quindi scegliere Aggiungi estensione.

  5. Nella finestra di dialogo Seleziona estensione elemento associazione selezionare httpTransport e quindi fare clic su OK.

  6. Fare clic su httpTransport e quindi nel riquadro Configurazione impostare il valore di keepAliveEnabled su False.

  7. Fare clic su textMessageEncoding e quindi nel riquadro Configurazione impostare il valore di messageVersion su Soap11WSAddressing10.

  8. Potrebbe essere necessario configurare proprietà aggiuntive in base alle esigenze.

BizTalk Server non supporta i client WCF che utilizzano ClientViaBehavior per le conversazioni multihop

I client WCF utilizzano ClientViaBehavior quando la destinazione di rete immediata non è il processore del messaggio abituale per abilitare le conversazioni multihop nel caso in cui l'applicazione chiamante non conosca la destinazione finale. Se si specifica ClientViaBehavior e si imposta l'indirizzo To su un servizio remoto in cui BizTalk Server fungerà da intermediario, verrà visualizzato il messaggio di errore simile al seguente:

The message with To 'net.tcp://localhost:5555/test.svc' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree