在SSIS中使用Web Service任务进行集成

SSIS是SQL Server 2005新增的一个服务,全称是SQL Server Integration Service。中文一般翻译为:集成服务或者整合服务。

SSIS在整个SQL Server的BI 平台中的定位是ETL解决方案,它的前身是SQL Server 2000的DTS(Data Transfomation Service),但较之DTS,有了很大的改变和增强:它是完全基于.NET编写的,并且提供了完整的服务、运行引擎、异常处理、跟踪日志、扩展机制等等。

有关SSIS的完整内容,如果有兴趣,应该参考有关的书籍,或者参加有关的培训学习。

本文主要讲解一下,如何在SSIS中使用Web Service,这是我经常被问到的问题:因为在做数据集成的时候,数据源系统可能没有办法让我们直接访问数据库。但是他们可以公开一些服务,这样我们就可以通过访问这些Web Service对其进行读取和整合。

1. 作为演示目的,我写了一个很简单的服务。模拟的是人事系统,它通过Web Service的方式将最新的员工信息发布出来。

image

点击”GetEmployees” 链接

image

点击“调用”按钮

image

我这里只是简单地随机产生了100个员工,包括了ID,Name,Gender,WorkYears,Groups等信息

这个服务的代码如下

using System;
using System.Web.Services;
using System.Data;

namespace HRService
{
    /// <summary>
    /// 这个服务模拟了一个人事系统,它将最新的员工列表发布出来
    /// 作者:陈希章
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class EmployeeService : System.Web.Services.WebService
    {
        [WebMethod(
            Description="这个服务取得所有的员工")]
        public DataSet GetEmployees()
        {
            DataSet ds = new DataSet();
            DataTable tb = new DataTable("Employees");

            tb.Columns.Add("ID");
            tb.Columns.Add("Name");
            tb.Columns.Add("Gender");
            tb.Columns.Add("WorkYears");
            tb.Columns.Add("Group");

            Random rnd=new Random();
            for (int i = 0; i < 100; i++)
            {
                DataRow row = tb.NewRow();
                row[0] = i+100;
                row[1] = "员工" + i.ToString();
                row[2] = i % 5 == 0 ? "男" : "女";
                row[3] = rnd.Next(20);
                row[4] = "班组" + i % 9;

                tb.Rows.Add(row);
            }
            ds.Tables.Add(tb);

            return ds;
        }
    }
}

2. 创建一个SSIS包,准备使用Web Service任务项去调用该服务

image

我们从工具箱中,拖拽一个”Web服务任务”到“控制流”的空白区域

image

选中该任务,点击右键,“编辑”

image

点击”HttpConnection”右侧的下拉按钮,选择“新建连接”

image

【注意】这里的服务器Url应该带有wsdl后缀,因为等一下可以利用这个路径生成一个本地的wsdl文件

我们这里没有使用凭据。需要说明一下的是,“Web服务任务”能够使用的凭据只有两种:匿名或者基本验证。

何时使用证书?如何我们的服务是用WSE做了安全控制的话。

 

点击“测试连接”,确保它是成功的

image

点击“确定”,“确定”退出连接管理器设置界面

image

在“WSDLFile”这里面输入一个临时路径,例如:E:\TEMP\Employee.wsdl

image

点击“下载WSDL”按钮, 如果不出意外的话,应该可以看到下面的提示

image

这个操作其实是产生了一个wsdl文件,我们可以打开来看一下

image

顾名思义,WSDL是对服务进行了描述。为什么需要描述呢?就是后续需要用到里面的信息进行设置。

接下来,我们转到“输入”这个页面

image

依次在右侧选择Service和Method

image

【注意】第三行有些乱码,是因为对中文支持不好,可以不予理会

这样,我们就完成了输入设置,也就是可以连接到Web Service了。

 

3. 如何将获取到的数据进行保存或者处理呢?

我们可以转到“输出”页面

image

它支持两种输出类型:文件连接或者变量

我们先用“文件连接”来接受输出,然后点击”File”右侧的小下拉箭头,点击“新建连接”

image

我们让它创建一个新的文件,保存在临时目录下。点击“确定”后即可完成该任务的配置

 

4. 测试任务运行。

image

选中“Web服务任务”,点击右键,“执行任务”

image

如果不出意外的话,该任务能够成功执行。

 

5. 查看结果。我们打开保存的那个文件,可以看到,这是一个标准的XML文件,证明我们已经把数据下载下来了。

image

 

结束语:我们现在已经通过“Web服务任务”成功地完成了服务的调用,并且将结果保存为一个本地文件。那么,怎么处理该文件,并将其数据上传到我们的数据仓库中去呢?

这个问题在下一篇讲解

本文由作者:陈希章 于 2009/6/20 11:20:05 发布在:http://www.cnblogs.com/chenxizhang/
本文版权归作者所有,可以转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
更多博客文章,以及作者对于博客引用方面的完整声明以及合作方面的政策,请参考以下站点:陈希章的博客中心
posted @ 2009-06-20 11:20  陈希章  阅读(4833)  评论(2编辑  收藏  举报