在SSIS 中使用 Web Service 以及 解析XML 数据

2891 查看

Web Service简介

Web Service是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web 应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。

技术和规则

在构建和使用Web Service时,主要用到以下几个关键的技术和规则:

  • 1.XML:描述数据的标准方法.
  • 2.SOAP:表示信息交换的协议.
  • 3.WSDL:Web服务描述语言.
  • 4.UDDI(Universal Description, Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。

实际上,WebService的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。由此可以看出,在以下三种情况下,使用WebService会带来极大的好处。

示例说明

本示例将调用美国一个查询城市编码的Webservice接口,将查询到的信息保存到我们自己数据库的表中。
http://www.webservicex.net/uszip.asmx 是一个查询美国城市编码信息的Webservice接口,例如我们点击GetInfoByCity方法,输入New York,调用后返回XML格式的文件。


SSIS-Web-Service-4.jpg

SSIS-Web-Service-5.jpg

SSIS-Web-Service-6.jpg

实现步骤

添加HTTP链接管理器

新建SSIS项目后,在连接管理器中右键选择【新建连接】,弹出的管理器类型面板中选择HTTP,点击添加后出现HTTP连接管理器面板,服务器URL填:http://www.webservicex.net/uszip.asmx?WSDL,注意,末尾要加上 ?WSDL 参数。单击【测试按钮】,测试连接成功后单击【确定】关闭对话框。


SSIS-Web-Service-1.jpg

SSIS-Web-Service-2.jpg

SSIS-Web-Service-3.jpg

设置Web服务任务控件

拖入Web服务任务控件,双击后打开Web服务任务编辑器,常规面板中,连接选择我们刚刚建的HTTP连接,WSDLFile需要我们自己建一个,OverwriteWSDLFile选项为true.之后单击【下载WSDL】按钮,如果不单击这个,后面就会报错的。


SSIS-Web-Service-7.jpg

切换到输入面板,在Service选择USZip,Method中有四个方法可以选,这里用GetInfoByCity,如果上面一步没有点击下载WSDL按钮的话,这里就选不了,要报错的。选完后下面那栏说明出现中文乱码,不用管它。参数赋值里面我就直接给了一个New York,当然也可以勾上变量复选框,用自己定义的包变量。


SSIS-Web-Service-8.jpg

切换到输出面板,输出类型可以选择文件或者是变量,这里我选了文件,把返回的XML保存在新建的XML文件里。


SSIS-Web-Service-9.jpg

执行下Web服务任务,返回的XML格式数据就保存在里文件里。这里要执行一下任务,让XML文件里有数据,为后面步骤做准备。


SSIS-Web-Service-10.jpg

数据流任务部分

控制流中拖入数据流任务,在数据流任务中拖入XML源控件,双击打开XML源编辑器,XML位置选择上面步骤创建的XML文件,然后点击【生成XSD】,输入一个XSD文件名,这个文件是用来生成对XML结构说明的。


SSIS-Web-Service-11.jpg

SSIS-Web-Service-12.jpg

切换到列面板,如果出现提示,单击【确定】。这里就会出现对XSD文件解析出要生成的列了。


SSIS-Web-Service-13.jpg

SSIS-Web-Service-14.jpg

数据流中拖入OLEDB目标控件,选择新建一个表。切换到列映射,可以编辑对应的输入输出列,这里默认就可以了。


SSIS-Web-Service-15.jpg

SSIS-Web-Service-16.jpg

至此,所有任务就建好了,执行一下包,看看数据库中的表是否有数据了。


SSIS-Web-Service-17.jpg

SSIS-Web-Service-18.jpg

总结

  • 1.HTTP连接部分的URL要带上?WSDL参数。
  • 2.Web服务编辑器常规面板配置好WSDL文件后要先下载WSDL。
  • 3.Web服务编辑器输出面板中,也可以把返回的XML数据保存在一个变量里,在后面的XML源中调用,但是我试了不成功,还不清楚问题出在哪。
  • 4.XML源编辑器里,要生成XSD文件,这个貌似对于比较标准的XML文件可以生成,我后来试了个其它Webservice的接口调用返回XML文件,里面有两个命名空间,然后生成XSD就报错了。
  • 5.最后一点也是耗费我最多时间的问题,我后来想调用国家天气查询的Webservice接口,但是返回的XML文件是带有数组类型的,像下图那样,这样的话用本文的做法生成XSD那里可以生成,但是只会出现string一列,写入数据库的表里只有string一列而且字段值都是NULL。所以要另外进行一些处理,这在后面的另一篇文章《SSIS中Foreach循环容器处理XML数据》里介绍。

SSIS-Web-Service-19.jpg

转载请注明出处(http://www.c-xuan.com/SSIS-Web-Service)