如何从SSIS发出HTTP请求?

时间:2011-07-13 19:14:12

标签: http ssis

我很想知道如何从SSIS进行HTTP调用。例如,我希望能够从http://www.domain.com/resource.zip下载文件,并在驱动器上记录下载的日期时间和文件的目标。我还想捕获文件大小等属性并捕获日期和时间。下载完成的时间。

3 个答案:

答案 0 :(得分:31)

您可以利用命名空间System.Net.WebClient在SSIS中借助Script Task来发出Http请求。以下示例显示了如何实现这一目标。该示例是在SSIS 2008 R2

中创建的

分步流程:

  1. 创建一个新的SSIS包并创建两个变量,即 RemoteUri LocalFolder 。将变量RemoteUri设置为值http://www.google.com/intl/en_com/images/srpr/logo1w.png。这是Google主页上徽标的图片网址。将变量LocalFolder设置为值C:\temp\。这是我们要保存内容的路径。请参阅屏幕截图# 1

  2. 在SSIS包中,放置Script Task。使用脚本任务代码部分下提供的代码替换脚本任务中的Main()方法。请参阅屏幕截图# 2

  3. 屏幕截图# 3 表示路径C:\temp\为空。

  4. 屏幕截图# 4 显示包的成功执行。

  5. 屏幕截图# 5 显示内容(在本例中为徽标图片)已下载到本地文件夹路径。

  6. 屏幕截图# 6 显示代码已经过测试,可以下载.zip文件。为此,使用需要下载的内容网址更改了变量 RemoteUri 的值。

  7. 脚本任务代码:

    C#代码,只能在 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;
    }
    

    屏幕截图#1:

    1

    屏幕截图#2:

    2

    屏幕截图#3:

    3

    屏幕截图#4:

    4

    屏幕截图#5:

    5

    屏幕截图#6:

    6

答案 1 :(得分:7)

只是@ user756519脚本的替代方案,不是那么快,但更具防弹性

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;
}

这样,webClient就不会挂起,而且你也不依赖于之前存在的C:\ Temp目录。 除此之外,@ user756519的答案非常详细。

答案 2 :(得分:5)

以下是几个选项:

  1. 第三方工具,例如CozyRoc或BlueSSIS。
  2. 使用WebClient创建脚本任务
  3. 使用HTTP连接管理器的脚本任务
  4. 脚本任务示例: http://microsoft-ssis.blogspot.com/2011/05/download-source-file-from-website-with.html