Je souhaite savoir comment effectuer un appel HTTP à partir de SSIS. Par exemple, j'aimerais pouvoir télécharger un fichier depuis http://www.domain.com/resource.Zip
et enregistrez la date et l'heure du téléchargement et la destination du fichier sur le lecteur. Je voudrais également capturer des attributs tels que la taille du fichier et capturer la date et l'heure de fin du téléchargement.
Vous pouvez utiliser l'espace de noms System.Net.WebClient
pour effectuer la demande Http à l'aide de Script Task
dans SSIS. L'exemple suivant montre comment cela peut être réalisé. L'exemple a été créé dans SSIS 2008 R2
.
Processus étape par étape:
Créez un nouveau package SSIS et créez deux variables à savoir RemoteUri et LocalFolder. Définissez la variable RemoteUri
avec la valeur http://www.google.com/intl/en_com/images/srpr/logo1w.png
. il s'agit de l'url de l'image du logo sur la page d'accueil de Google. Définissez la variable LocalFolder
avec la valeur C:\temp\
. c'est le chemin où nous allons enregistrer le contenu. Reportez-vous à la capture d'écran # 1.
Sur le package SSIS, placez un Script Task
. Remplacez la méthode Main () dans la tâche de script par le code fourni dans la section Script Task Code. Reportez-vous à la capture d'écran # 2.
La capture d'écran # montre que le chemin C:\temp\
est vide.
La capture d'écran # 4 montre une exécution réussie du paquet.
La capture d'écran # 5 montre que le contenu (dans ce cas, l'image du logo) a été téléchargé sur le chemin du dossier local.
La capture d'écran # 6 montre que le code a été testé pour télécharger un fichier .Zip. Pour ce faire, la valeur de la variable RemoteUri a été modifiée avec l'URL de contenu à télécharger.
Code de tâche de script:
C # code utilisable uniquement dans SSIS 2008 and above
.
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::RemoteUri");
Dts.VariableDispenser.LockForRead("User::LocalFolder");
Dts.VariableDispenser.GetVariables(ref varCollection);
System.Net.WebClient myWebClient = new System.Net.WebClient();
string webResource = varCollection["User::RemoteUri"].Value.ToString();
string fileName = varCollection["User::LocalFolder"].Value.ToString() + webResource.Substring(webResource.LastIndexOf('/') + 1);
myWebClient.DownloadFile(webResource, fileName);
Dts.TaskResult = (int)ScriptResults.Success;
}
Capture d'écran # 1:
Capture d'écran # 2:
Capture d'écran n ° 3:
Capture d'écran # 4:
Capture d'écran # 5:
Capture d'écran # 6:
Juste une alternative pour le script @ user756519, pas aussi rapide, mais plus pare-balles
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::RemoteUri");
Dts.VariableDispenser.LockForRead("User::LocalFolder");
Dts.VariableDispenser.GetVariables(ref varCollection);
System.Net.WebClient myWebClient = new System.Net.WebClient();
string webResource = varCollection["User::RemoteUri"].Value.ToString();
string fileName = varCollection["User::LocalFolder"].Value.ToString() + webResource.Substring(webResource.LastIndexOf('/') + 1);
byte[] data;
using (WebClient client = new WebClient())
{
data = client.DownloadData(webResource);
}
FileInfo file = new System.IO.FileInfo(fileName);
file.Directory.Create(); // If the directory already exists, this method does nothing.
File.WriteAllBytes(file.FullName, data);
Dts.TaskResult = (int)ScriptResults.Success;
}
De cette façon, webClient ne reste pas suspendu et vous ne dépendez pas non plus de l'existence précédente du répertoire C:\Temp. A part ça, excellente réponse de @ user756519, très détaillée.
Voici quelques options:
Exemples de tâches de script sur: http://Microsoft-ssis.blogspot.com/2011/05/download-source-file-from-website-with.html