Condividi tramite


Risolvere i problemi operativi con l'adapter SQL

Questa sezione illustra l'uso delle tecniche di risoluzione dei problemi per risolvere gli errori operativi che potrebbero verificarsi quando si usa l'adapter Microsoft BizTalk per SQL Server.

Abilitazione della traccia

È necessario abilitare la traccia tra l'adapter, WCF LOB Adapter SDK e SQL Server per raccogliere altre informazioni sui problemi riscontrati durante l'uso dell'adapter SQL. Per altre informazioni sul supporto della traccia nell'adapter SQL, vedere Traccia diagnostica e registrazione dei messaggi nell'adapter SQL.

Problemi noti

Di seguito sono riportati gli errori più comuni che potrebbero verificarsi quando si usa l'adapter SQL, insieme alla loro probabile causa e risoluzione.

Errore durante il caricamento delle associazioni dell'adapter

Problema

Quando si tenta di avviare il plug-in Aggiungi servizio adapter di Visual Studio o il componente aggiuntivo Del progetto BizTalk del servizio adapter, viene visualizzato l'errore seguente:

There was an error loading the binding, <binding name>, from your system configuration.  
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.  

Causa

Quando si tenta di avviare il plug-in Add Adapter Service Reference o il componente aggiuntivo Consume Adapter Service, WCF carica le associazioni di adapter per tutte le schede installate. A sua volta, le associazioni dell'adattatore dipendono dal software client specifico per l'applicazione aziendale. È possibile risolvere questo problema se è stata eseguita un'installazione tipica o completa dell'adapter, che installa tutte le schede contenute nel Pacchetto adapter BizTalk. Tuttavia, le librerie client LOB potrebbero essere installate solo per un'applicazione aziendale. Di conseguenza, la GUI non riesce a caricare le associazioni per gli altri adattatori.

Risoluzione

Assicurarsi di eseguire un'installazione personalizzata delle schede per installare solo l'adattatore necessario.

L'adattatore SQL non viene visualizzato nell'elenco delle schede nella console di amministrazione di BizTalk Server

Problema

A differenza della versione precedente delle schede fornite con BizTalk Server, l'adapter SQL fornito con BizTalk Adapter Pack non viene visualizzato nell'elenco delle schede nella console di amministrazione BizTalk Server.

Causa

L'adattatore SQL più recente è un'associazione personalizzata WCF. Quindi, anche se la console di amministrazione BizTalk Server visualizza l'adattatore WCF-Custom, non visualizza le associazioni personalizzate WCF e quindi non visualizza l'adapter SQL basato su WCF.

Risoluzione

È possibile aggiungere in modo esplicito l'adapter SQL alla console di amministrazione BizTalk Server seguendo la procedura descritta in Aggiunta dell'adapter SQL alla console di amministrazione di BizTalk Server.

Errore durante l'esecuzione di operazioni in un database SQL Server

Problema

L'adattatore restituisce l'errore seguente durante l'esecuzione di qualsiasi operazione in un database SQL Server usando BizTalk Server.

  • Per BizTalk Server

    System.ArgumentNullException: Value cannot be null.  
    

    Causa

    L'azione WCF per il messaggio non viene specificata. WCF richiede che venga specificata un'azione SOAP per ogni operazione, che informa l'adapter sull'operazione da eseguire nell'applicazione LOB.

    Risoluzione

    Specificare l'azione SOAP nella porta di invio o come proprietà del contesto di messaggio in un'orchestrazione BizTalk. Per istruzioni, vedere Configurare l'azione SOAP per l'adapter SQL. Per visualizzare un elenco di azioni per ogni operazione, vedere Messaggi e schemi di messaggi .

InvalidOperationException con ErrorCode=5 durante l'esecuzione di operazioni FILESTREAM

Problema

Viene visualizzato l'errore seguente durante l'uso dell'adapter SQL per eseguire operazioni FILESTREAM.

System.InvalidOperationException: OpenSqlFileStream returned error.  
ErrorCode:5  
  

Causa

Potrebbero essere state specificate le credenziali del database per connettersi al database SQL Server. Per eseguire operazioni FILESTREAM, è sempre necessario usare l'autenticazione di Windows. Il codice di errore "5" indica che l'accesso viene negato a causa di credenziali non corrette. Per altre informazioni sui diversi codici di errore, vedere Codici di errore di sistema (0-499).

Risoluzione

Usare l'autenticazione di Windows per connettersi al database SQL Server. In BizTalk Server console di amministrazione è possibile lasciare vuoti i campi nome utente e password nella finestra di dialogo WCF-Custom o configurazione porta WCF-SQL.

L'operazione di polling non restituisce messaggi anche se vengono specificate istruzioni valide per PollingStatement e PolledDataAvailableStatement

Problema

Anche se vengono specificati valori validi per le proprietà di associazione PollingStatement e PolledDataAvailableStatement, l'adapter non riceve un messaggio di polling da SQL Server.

Causa

Verificare se qualsiasi altra transazione ha preso un blocco nella tabella in cui viene eseguito il polling dell'adapter.

Risoluzione

Se si vuole eseguire il polling di una tabella che viene aggiornata come parte di un'altra transazione, è possibile usare il parametro "with (nolock)" come parte della query specificata per la proprietà di associazione PolledDataAvailableStatement per assicurarsi che i dati vengano restituiti anche se un blocco viene imposto dall'altra transazione. Per altre informazioni, vedere Blocco SQL nel motore di database.

L'adattatore non riesce a inserire, aggiornare o eliminare volumi elevati di dati in un'unica operazione usando BizTalk Server

Problema

L'adattatore SQL non riesce a inserire, aggiornare o eliminare grandi volumi di dati in un'unica operazione usando BizTalk Server.

Causa

L'inserimento, l'aggiornamento o l'eliminazione di grandi volumi di dati possono richiedere tempo e l'adattatore SQL o la transazione in cui viene eseguita l'operazione, può richiedere il timeout.

Risoluzione

  • Per BizTalk Server

    1. Specificare il timeout per l'adapter WCF nella machine.config. Passare al file machine.config nell'unità <>di sistema:\WINDOWS\Microsoft.NET\Framework<\version>\CONFIG e aggiungere l'estratto simile al seguente.

      <configuration>  
       <system.transactions>  
        <machineSettings maxTimeout="02:00:00" />  
       </system.transactions>  
      </configuration>  
      

      Con questa impostazione, il timeout dell'adattatore WCF è impostato su 2 ore.

    2. Specificare le impostazioni di timeout per le transazioni MSDTC nella machine.config. Passare al file machine.config nell'unità <>di sistema:\WINDOWS\Microsoft.NET\Framework<\version>\CONFIG e aggiungere l'estratto simile al seguente.

      <system.transactions>   
              <defaultSettings distributedTransactionManagerName="<computer_name>" timeout="02:00:00"/>   
          </system.transactions>  
      
      

      Con questa impostazione, il timeout MSDTC è impostato su 2 ore. Il valore predefinito per il timeout MSDTC è di 10 minuti.

      Importante

      È necessario apportare questa modifica nei computer che eseguono il client dell'adattatore e SQL Server. Nell'estratto sostituire <computer_name> con il nome del computer che esegue il client dell'adattatore e SQL Server.

    3. Impostare la proprietà di associazione SendTimeout per l'adapter SQL su un valore abbastanza grande. Per istruzioni su come impostare le proprietà di associazione, vedere Configurare le proprietà di associazione per l'adapter SQL.

La convalida completa dello schema in BizTalk Server ha esito negativo per i messaggi di risposta contenenti DataSet

Problema

Per le operazioni che restituiscono un messaggio di risposta contenente un oggetto DataSet, ad esempio ExecuteReader, la convalida completa dello schema non riesce in BizTalk Server.

Risoluzione

È consigliabile non eseguire una convalida completa dello schema per i messaggi di risposta contenenti un set di dati. In alternativa, è possibile eseguire quanto segue:

  1. Eseguire l'operazione una volta che restituisce il messaggio di risposta con lo schema.

  2. Copiare lo schema dal messaggio di risposta a un file xsd e aggiungere questo file al progetto BizTalk.

  3. Usare una query xpath nell'orchestrazione per estrarre i dati dal messaggio di risposta.

Errore con RootNode TypeName nei progetti BizTalk

Problema

In un progetto BizTalk in Visual Studio, se gli schemi generati dal componente aggiuntivo Del servizio adapter di utilizzo contengono caratteri non validi o parole riservate per la proprietà RootNode TypeName , si verificherà l'errore seguente durante la compilazione del progetto:

Node <node reference> - Specify a valid .NET type name for this root node.  
The current .NET type name of this root node is invalid (it is a reserved BizTalk Keyword or is an invalid C# identifier).  

Risoluzione

  1. Fare clic con il pulsante destro del mouse sul nodo rood a cui fa riferimento nell'errore e selezionare Proprietà.

  2. Per la proprietà RootNode TypeName , rimuovere qualsiasi carattere illegale o parole riservate, ad esempio punto (.).

L'adapter non riesce a generare metadati di stored procedure fortemente tipizzata con tabelle temporanee

Problema

L'adapter non riesce a generare metadati per stored procedure fortemente tipizzata che includono tabelle temporanee nella definizione. L'adattatore fornisce l'eccezione seguente.

Microsoft.ServiceModel.Channels.Common.MetadataException:  
Retrieval of Operation Metadata has failed while building WSDL at 'TypedProcedure/<schema>/<stored_procedure_name>' --->  
System.Data.SqlClient.SqlException: Invalid object name '<temp_table_name>'.  
  

Risoluzione

L'adapter SQL non supporta la generazione di metadati per stored procedure fortemente tipizzata che contengono tabelle temporanee nella definizione. È invece necessario generare metadati per la stessa procedura dal nodo Procedure durante l'uso del plug-in Aggiungi plug-in del servizio adapter o Usare il componente aggiuntivo del servizio adapter.

Avviso di associazione non valido quando si usa l'adapter in Visual Studio

Problema

Quando si usa l'adapter per creare un'applicazione in Visual Studio e si apre il file di configurazione (app.config) generato dall'adattatore, viene visualizzato un avviso simile al seguente:

The element 'bindings' has invalid child element 'sqlBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...  

Causa

Questo avviso viene visualizzato perché l'associazione dell'adapter SQL, sqlBinding, non è un'associazione standard fornita con Windows Communication Foundation (WCF).

Risoluzione

È possibile ignorare questo avviso.

BizTalk Server genera un'eccezione se si usano più schemi di notifica nella stessa applicazione o si usa lo schema di notifica in più applicazioni nello stesso host

Problema

BizTalk Server genera un'eccezione XLANG o un'eccezione che indica che l'applicazione non riesce a individuare la specifica del documento perché più schemi corrispondono al tipo di messaggio.

Causa

Ciò avviene a causa di una delle seguenti operazioni:

  • È stato generato più di uno schema di notifica in un progetto di BizTalk Server, distribuito in un'applicazione BizTalk Server e quindi è stata eseguita l'applicazione per ricevere notifiche dal database SQL Server. Poiché gli schemi di notifica sono comuni, esiste un conflitto tra gli schemi distribuiti nell'applicazione BizTalk Server.

  • Nel caso di più progetti, è stato generato uno schema di notifica per ogni progetto di BizTalk Server, distribuito ogni progetto in un'applicazione BizTalk Server separata nello stesso host ed è stata quindi eseguita un'applicazione o applicazioni per ricevere notifiche dal database SQL Server. Poiché gli schemi e gli assembly sono accessibili tra le applicazioni in BizTalk Server, si verifica un conflitto tra gli schemi comuni distribuiti in varie applicazioni e assembly BizTalk Server.

    Risoluzione

    Usare un singolo file dello schema di notifica per un'applicazione BizTalk Server. Se è necessario usare lo schema di notifica in più applicazioni BizTalk Server nello stesso host, creare un'applicazione contenente un singolo schema di notifica e quindi usare lo schema di notifica di tutte le altre applicazioni in BizTalk Server.

Il client dell'adattatore genera un'eccezione per eseguire un'operazione dopo il ripristino della connettività tra il client della scheda e il database SQL Server

Problema

Il client dell'adapter genera l'eccezione seguente sull'esecuzione di un'operazione nel database SQL Server:

{System.Data.Common.DbException} = {"A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"}  

Causa

Durante l'esecuzione di un'operazione, l'adapter usa la connessione dal pool di connessioni SQL ADO.NET per connettersi al database SQL Server ed eseguire l'operazione. Se si verifica una breve interruzione di rete tra il client della scheda e il database SQL Server o se il database di SQL Server è inattivo, tutte le connessioni nel pool di connessioni sql ADO.NET non sono valide. Dopo aver ripristinato la connettività e si tenta di eseguire un'operazione nel database SQL Server, l'adapter usa le stesse connessioni non valide dal pool di connessioni sql ADO.NET e quindi il client della scheda genera l'eccezione.

Risoluzione

Il client dell'adapter deve implementare la logica di ripetizione dei tentativi nell'esecuzione dell'operazione in cui devono rilevare l'eccezione e specificare il conteggio dei tentativi come "n+1", dove "n" è il valore specificato per la proprietà di associazione MaxConnectionPoolSize. Ciò implica che se nel pool di connessioni sono presenti un numero di connessioni "n" non valido, in teoria il client dell'adattatore dovrebbe riprovare per un massimo di "n+1" volte per ottenere una connessione valida e quindi eseguire l'operazione.

Ad esempio, per specificare il conteggio dei tentativi in BizTalk Server, aprire la finestra di dialogo Proprietà di una porta di invio in un'applicazione, fare clic su Opzioni avanzate trasporto nel riquadro sinistro della finestra di dialogo e nell'area Opzioni trasporto specificare un valore nell'elenco Conteggio tentativi.

L'utilizzo della memoria e il conteggio dei thread aumenta quando si usa l'adapter in un'operazione in ingresso transazionata

Problema

In un'operazione in ingresso transazionata, ad esempio Polling, se nella tabella non sono disponibili dati e l'adapter continua a eseguire il polling, in un periodo di tempo si verifica un aumento dell'utilizzo della memoria e del conteggio dei thread.

Causa

Se nella tabella non sono disponibili dati, dopo ogni ciclo di timeout di ricezione, Windows Communication Foundation (WCF) genera un nuovo thread per continuare l'operazione di polling. Di conseguenza, il numero di thread e l'utilizzo della memoria aumentano in un periodo di tempo. Tuttavia, se la tabella sottoposta a polling ha alcuni dati, lo stesso thread continua a eseguire tutti i polling successivi.

Risoluzione

È consigliabile impostare ReceiveTimeout sul valore massimo possibile, ovvero 24.20:31:23.6470000 (24 giorni) in modo che un nuovo thread venga generato solo ogni 24 giorni. Ciò garantisce che l'utilizzo della memoria e il conteggio dei thread non aumentano troppo presto.

Nota

Se è stato impostato SqlAdapterInboundTransactionBehavior, assicurarsi che TransactionTimeout sia configurato anche per il valore massimo possibile, ovvero 24.20:31:23.6470000 (24 giorni). Quando si usa questa soluzione alternativa, è possibile aggiungere SqlAdapterInboundTransactionBehavior solo se è necessario configurare il livello di isolamento delle transazioni. In caso contrario, è consigliabile rimuovere tale comportamento.

Per altre informazioni sulla proprietà di associazione ReceiveTimeout, vedere Informazioni sulle proprietà di associazione dell'adapter BizTalk per SQL Server. Per istruzioni sulla specifica delle proprietà di associazione, vedere Configurare le proprietà di associazione per l'adapter SQL.

Nota

Quando si usa l'adattatore con BizTalk Server, l'impostazione del timeout su un valore elevato non influisce sulla funzionalità dell'adattatore.

Vedere anche

Risolvere i problemi relativi all'adapter SQL