2014-07-08 13 views
5

Ho sviluppato un progetto ssis rispetto a 2012 Ultimate. Utilizzo il modello di implementazione del progetto e il progetto è impostato per l'esecuzione in modalità a 32 bit. Il pacchetto viene eseguito senza errori nel mio ambiente di sviluppo, ma quando schiero al catalogo SSIS e si tenta di correre lì, ottengo il seguente errore:Attività script DTS Errore di runtime: l'eccezione di una chiamata è stata lanciata dall'obiettivo di una chiamata

error dialog

schiero il progetto a un Windows Server 2012 R2 e il database è anche 2012 con un catalogo SSIS.

Ho aperto il progetto sul server e ho tentato di eseguire il debug dell'attività di script sul server con un punto di interruzione ma l'errore si verifica prima di raggiungere il punto di interruzione.

Se disattivo tutte le mie attività di script, il pacchetto viene eseguito senza errori sul server.

ho anche aggiornato i server di opzioni di sicurezza locali disabilitando Cryptography sistema: utilizza algoritmi FIPS compatibile come una possibile soluzione postato su Microsoft Support.

Ho anche tentato di eseguire come un pacchetto di file system sul server e ottengo lo stesso errore.

Ho anche verificato tre volte che le mie variabili sono corrette e le ho anche impostate come variabili di lettura read.

Il primo codice attività di script è riportato di seguito (ma tutte le attività di scrip non superano/tre in questo pacchetto). L'attività di script fa riferimento a una DLL denominata UHS.IntegrationServices.CommonUtils che è stata sottoposta a GAC ​​e la DLL è stata creata in VS 2005 con framwork 2.0.50727.

Public Sub Main() 

    Dim packageID As String = Dts.Variables("System::PackageID").Value.ToString() 
    Dim strInterfaceName As String = Dts.Variables("System::PackageName").Value.ToString() 
    Dim strConfigConnectionString1 As String = Dts.Variables("User::UHS_SSIS_CNXN_STR_CONFIG").Value.ToString() 
    Dim myConnection As OleDb.OleDbConnection = New OleDb.OleDbConnection 
    Dim mySqlCommand As OleDb.OleDbCommand = New OleDb.OleDbCommand 
    Dim myReader As OleDb.OleDbDataReader = Nothing 
    Dim rowsProcessed As Integer = 0 

    Try 
     myConnection.ConnectionString = strConfigConnectionString1 
     myConnection.Open() 

     Dim getEmailQuery As String = "SELECT Email FROM EmailMaster" & _ 
             " where InterfaceName='" & strInterfaceName & "'" & _ 
             " and Active = 'Y' " 

     Dim NotifyInterface As SMTPNotifyAlerts 
     NotifyListenerManager.GetNotifierByType(packageID, NotifyInterface, CommonNotifierAlerts.AlertInfo.AlertTypes.alertEmail) 


     mySqlCommand = New OleDb.OleDbCommand(getEmailQuery, myConnection) 
     mySqlCommand.CommandTimeout = 0 
     myReader = mySqlCommand.ExecuteReader 

     If (myReader.HasRows()) Then 
      While (myReader.Read()) 
       NotifyInterface.alertDest.Add(myReader("Email").ToString().Trim()) 
       rowsProcessed = rowsProcessed + 1 
      End While 
     End If 

     NotifyListenerManager.BroadcastMessage(CommonNotifierAlerts.BasicAlerts, 0, Nothing, "Startup logfile") 
     Dts.TaskResult = ScriptResults.Success 
    Catch ex As Exception 
     Dts.Events.FireError(0, "Init Email Master", ex.Message, "", 0) 
     Dts.TaskResult = ScriptResults.Failure 
    End Try 

End Sub 

Il problema sembra essere nel riferimento alla DLL. Quando commento le righe NotifyInterface e NotifyListener lo script viene eseguito senza errori ma la dll si trova nel GAC e posso visualizzarla in C: \ Windows \ assembly.

Perché questo funziona sul mio locale ma non sul server? Il framework 2.0 è necessario sul server? Se il riferimento alla dll è rotto, non dovrei ottenere un errore più descrittivo?

Qualsiasi assistenza nella ricerca di idee per la risoluzione dei problemi sarebbe molto apprezzata.

+0

Ciao, hai risolto il problema? qual è la soluzione? Grazie – Ling

risposta

3

È necessario impostare un punto di interruzione all'inizio della PRIMA attività di script, proprio come si farebbe in qualsiasi situazione di debug VB. Quindi F8 attraverso ogni riga di codice fino a quando non viene generato un errore.

+0

che ha funzionato per me. –