Saya tertarik mengetahui cara melakukan panggilan HTTP dari SSIS. Misalnya, saya ingin mengunduh file dari http://www.domain.com/resource.zip
dan mencatat tanggal waktu pengunduhan dan tujuan file di drive. Saya juga ingin menangkap atribut seperti ukuran file dan menangkap tanggal & waktu pengunduhan selesai.
Bagaimana cara membuat permintaan HTTP dari SSIS?
Jawaban (3)
Anda dapat menggunakan namespace System.Net.WebClient
untuk membuat permintaan Http dengan bantuan Script Task
di SSIS. Contoh berikut menunjukkan bagaimana hal ini dapat dicapai. Contohnya dibuat di SSIS 2008 R2
.
Proses langkah demi langkah:
Buat paket SSIS baru dan buat dua variabel yaitu RemoteUri dan LocalFolder. Atur variabel
RemoteUri
dengan nilaihttp://www.google.com/intl/en_com/images/srpr/logo1w.png
. ini adalah url gambar logo di beranda Google. Atur variabelLocalFolder
dengan nilaiC:\temp\
. ini adalah jalur dimana kita akan menyimpan konten. Lihat tangkapan layar #1.Pada paket SSIS, tempatkan
Script Task
. Ganti metode Main() dalam tugas skrip dengan kode yang disediakan di bagian Kode Tugas Skrip. Lihat tangkapan layar #2.Tangkapan layar #3 menunjukkan bahwa jalur
C:\temp\
kosong.Tangkapan layar #4 menunjukkan eksekusi paket yang berhasil.
Tangkapan layar #5 menunjukkan bahwa konten (dalam hal ini gambar logo) telah diunduh ke jalur folder lokal.
Tangkapan layar #6 menunjukkan bahwa kode tersebut diuji untuk mengunduh file .zip. Untuk mencapai hal ini, nilai variabel RemoteUri diubah dengan url konten yang perlu diunduh.
Kode tugas skrip:
Kode C# yang hanya dapat digunakan di 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;
}
Tangkapan Layar #1:
Tangkapan layar #2:
Tangkapan Layar #3:
Tangkapan Layar #4:
Tangkapan Layar #5:
Tangkapan Layar #6:
Sekadar alternatif skrip @ user756519, tidak secepat, tapi lebih antipeluru
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;
}
Dengan cara ini, webClient tidak hang, dan Anda juga tidak bergantung pada keberadaan direktori C:\Temp sebelumnya. Selain itu, jawaban bagus dari @ user756519, sangat detail.
Berikut beberapa opsi:
- Alat pihak ketiga seperti CozyRoc atau BlueSSIS.
- Tugas Skrip dengan WebClient
- Tugas Skrip dengan Manajer Koneksi HTTP
Contoh Tugas Skrip di: http://microsoft-ssis.blogspot.com/2011/05/download-source-file-from-website-with.html