2012-06-07 6 views
2

Nous sommes confrontés à un problème lors de l'exécution d'un package SSIS à partir d'ASP.NET lors du déploiement du site Web. Nous avons chargé le package dans un serveur Integration Services dans MSDB. Lorsque nous essayons le package à partir de SQL Server Management Studio, il s'exécute correctement. Lorsque j'exécute le code à partir de Visual Studio, le package chargé dans le serveur s'exécute correctement. Le problème survient lorsque la page est déployée sur un serveur: aucune exception n'est détectée et aucune erreur n'est consignée, mais le package ne s'exécute pas. Nous voyons juste une erreur dans Windows Event Viewer en disant: "Package" "a échoué.". La page ASP.NET exécute l'emprunt d'identité d'un compte avec l'accès "sysadmin" à SQL Server et également les partages où se trouvent les fichiers Excel source.Erreur lors de l'exécution du package SSIS à partir d'ASP.NET

Voici le code appelant le package SSIS:

public void executePkg(string pkgAddr, string pkgServer, int periodID) 
    { 
     logger.Info(string.Format("Execution of SSIS Package '{0}' in server '{1}' started.", pkgAddr, pkgServer)); 
     string pidvar = "User::periodid"; 
     string pkgLocation; 
     Package pkg; 
     Application app; 
     DTSExecResult pkgResults; 
     app = new Application(); 
     pkgLocation = pkgAddr; 
     try 
     { 
      pkg = (Package)app.LoadFromSqlServer(pkgAddr, pkgServer, null, null, null); 
      Variables vars = pkg.Variables; 
      int varCount = vars.Count; 
      bool varExist = vars.Contains(pidvar); 
      pkg.VariableDispenser.LockOneForWrite(pidvar, ref vars); 
      vars[pidvar].Value = periodID; 
      pkg.Variables[pidvar].Value = periodID; 
      vars.Unlock(); 
      pkgResults = pkg.Execute(); 
     } 
     catch (Exception ex) 
     { 
      logger.Error(ex.Message); 
     } 
    } 

Toute aide serait appréciée.

Remarque: Juste une petite correction, l'ASP.NET n'emprunte plus d'identité, à la place, l'AppPool est en cours d'exécution avec le compte de service. Le comportement est le même avec les deux scénarios.

Répondre

1

Y a-t-il des différences sur l'architecture des boîtiers de développement et du serveur? N'oubliez pas de noter que si vous développez un package dans un environnement 32 bits et souhaitez exécuter le package dans un environnement 64 bits, les gestionnaires de connexions doivent être compatibles 64 bits. Certains gestionnaires de connexions tels qu'Excel fonctionnent uniquement dans un environnement 32 bits.

0

Il semble que votre principal problème soit l'absence de rapports d'erreurs.

Première:

Est-ce que votre package SSIS ont la journalisation des erreurs activée? Je l'allume, juste pour OnError Events. Cela va créer une table dans la base de données appelée sysssislog et écrire des erreurs (et tous les autres journaux que vous choisissez) là.

https://technet.microsoft.com/en-us/library/ms138020%28v=sql.105%29.aspx

A noter: Quand je fais cela, SSIS crée une table appelée domaine \ username.sysssislog au lieu de dbo.sysssislog. Si votre paquet le fait, vous aurez juste besoin de supprimer la table mal nommée et de créer dbo.sysssislog pour que le paquet puisse y écrire ses erreurs.

Deuxième:

Puisque vous utilisez le modèle objet pour exécuter votre package, vous pouvez capturer les erreurs de votre forfait et faire quelque chose avec eux. Pour le débogage, je les affiche dans une fenêtre de message afin que je puisse voir quel est le problème.

Voilà comment je l'ai fait, mais je ne suis pas sûr que c'est bien huilée:

  Dim errReport As String 
      Dim errors As DtsErrors = pkg.Errors 

      Dim errItem As Boolean = errors.Contains(0) 

      errReport = "No Error" 
      If (errItem) Then 
       Dim firstEItem As DtsError = errors(0) 
       Dim ex As New Exception("The file could not be loaded. Please submit a helpdesk ticket.") 
       Throw ex 
       errReport = "The following error occurred: " + firstEItem.Description 
      End If 


      MsgBox(errReport, MsgBoxStyle.OkOnly, pkgResults.ToString) 

J'espère que cela aide.

Questions connexes