65.9K
CodeProject 正在变化。 阅读更多。
Home

通过 SSIS 中的 Web 服务任务使用通过 SQL Server HTTP Endpoint 创建的 Web 服务

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (11投票s)

2011 年 5 月 12 日

CPOL

4分钟阅读

viewsIcon

77150

downloadIcon

704

在本文中,我们将了解如何通过 SSIS 的 Web 服务任务使用通过 HTTP Endpoint 公开的 Web 服务。

通过 SSIS 中的 Web 服务任务使用通过 SQL Server HTTP Endpoint 创建的 Web 服务

目录

  1. 引言
  2. 数据源
  3. Endpoint 创建
  4. WSDL 文件创建
  5. Web 服务任务配置及使用 Web 服务任务调用 Web 服务
  6. 结论

引言

Web 服务允许各种应用程序相互通信。它们基于某些标准

  • XML -> 表示数据
  • SOAP (Simple Object Access Protocol) -> 数据交换
  • WSDL (Web Service Description Language) -> 描述 Web 服务的各项功能。

HTTP Endpoint 是 SQL Server 中的一个对象,SQL Server 使用它在网络上进行通信。它包含了 Web 方法(通常是数据库中执行的存储过程(T-SQL 或 CLR)),Web 服务会查询这些方法。

SSIS 中的 Web 服务任务用于执行 Web 服务方法。

在本文中,我们将探讨如何通过 SSIS Web 服务任务来调用通过 HTTP Endpoint 公开的 Web 服务方法。

数据源

为了进行此实验,我们将使用以下脚本生成并填充名为 (tbl_Players) 的 Players 表。

-- Drop the table if it exists
IF EXISTS (SELECT * FROM sys.objects WHERE name = N'tbl_Players' AND type = 'U')
    DROP TABLE tbl_Players
GO
SET ANSI_NULLS ON
GO
--Create the table
CREATE TABLE tbl_Players (
	PlayerID INT IDENTITY,
	PlayerName VARCHAR(15),
	BelongsTo VARCHAR(15),
	MatchPlayed INT,
	RunsMade INT,
	WicketsTaken INT,
	FeePerMatch NUMERIC(16,2)
)

--Insert the records
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('A. Won','India',10,440,10, 1000000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('A. Cricket','India',10,50,17, 400000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('B. Dhanman','India',10,650,0,3600000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('C. Barsat','India',10,950,0,5000000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('A. Mirza','India',2,3,38, 3600000)

INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('M. Karol','US',15,44,4, 2000000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('Z. Hamsa','US',3,580,0, 400)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('K. Loly','US',6,500,12,800000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('S. Summer','US',87,50,8,1230000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('J.June','US',12,510,9, 4988000)

INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('A.Namaki','Australia',1,4,180, 999999)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('Z. Samaki','Australia',2,6,147, 888888)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('MS. Kaki','Australia',40,66,0,1234)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('S. Boon','Australia',170,888,10,890)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('DC. Shane','Australia',28,39,338, 4444499)

INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('S. Noami','Singapore',165,484,45, 5678)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('Z. Biswas','Singapore',73,51,50, 22222)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('K. Dolly','Singapore',65,59,1,99999)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('S. Winter','Singapore',7,50,8,12)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('J.August','Singapore',9,99,98, 890)

我们还将在数据库中创建以下存储过程,其脚本如下

If Exists (Select * from sys.objects where name = 'usp_SelectPlayerRecords' and type = 'P')
    Drop Procedure usp_SelectPlayerRecords
Go
-- Create the  stored procedure
Create Procedure [dbo].[usp_SelectPlayerRecords]
As
Begin
	Select 
		PlayerID
		,PlayerName
		, BelongsTo
		, MatchPlayed
		,RunsMade
		,WicketsTaken
		,FeePerMatch
	From
	tbl_Players
End

(A) Endpoint 创建

让我们执行以下脚本来创建 endpoint:

IF EXISTS ( SELECT NAME FROM sys.http_endpoints WHERE NAME = N'PlayerRecord_EP' )
DROP ENDPOINT PlayerRecord_EP
GO
CREATE ENDPOINT [PlayerRecord_EP] 
	STATE=STARTED
	AS HTTP 
	(
		PATH=N'/PlayerName'
		, PORTS = (CLEAR) 
		,AUTHENTICATION = (INTEGRATED)
		, SITE=N'localhost'
		, CLEAR_PORT = 8000
	)
	FOR SOAP 
	(
		WEBMETHOD 'PlayerList'
		( NAME=N'[SSISExperiments].[dbo].[usp_SelectPlayerRecords]')
		, BATCHES=DISABLED
		, WSDL=DEFAULT
		, DATABASE=N'SSISExperiments'
		, NAMESPACE=N'http://SSISExperiments/Players'
	)
GO

代码解释

AS HTTP 部分标识了路径、端口和身份验证方法。PATH 始终以正斜杠 (/) 开始,并标识根目录下的路径。在此示例中,我们创建一个路径为 '/PlayerName' 的 endpoint,该 endpoint 在本地服务器上可用。因此,完整路径将是 https://:8000/PlayerNamePORTS 设置为 CLEAR 表示我们使用 HTTP 和端口 80。

FOR SOAP 部分标识了 Web 方法、WSDL 和数据库。WEBMETHOD 用于标识通过 endpoint 调用的存储过程。

运行脚本将在 Server Objects 中创建 endpoint。

1.jpg

注意: 如果要删除 endpoint,请执行以下命令:

 DROP ENDPOINT PlayerRecord_EP 
然后它将被删除。

(B) WSDL 文件创建

在本例中,WSDL 可以在以下位置查看:https://:8000/PlayerName?wsdl

部分输出如下:

2.jpg

我们将 WSDL 文件保存在硬盘上。为此,在 IE 浏览器中,右键单击 -> 查看源代码 -> 文件 -> 另存为…。将文件另存为 PlayerList.wsdl,保存在硬盘上的任意方便的位置。

(C) Web 服务任务配置及使用 Web 服务任务调用 Web 服务

我们将按照以下步骤满足要求:

步骤 1: 打开 BIDS 并创建一个新的 Integration Services 项目。在 Control Flow 设计器中,从工具箱中拖放一个 Web 服务任务。

步骤 2: 双击 Web 服务任务以打开 Web 服务任务编辑器。

3.jpg

步骤 3: 从 General 列表项中,我们将提供以下信息:

  1. HttpConnection
  2. WSDL file
  3. OverwriteWSDLFile

(a) 配置 HttpConnection 字段

在 HttpConnection 中,让我们单击空白区域,然后从下拉列表中选择 <New Connection…>。

4.jpg

在 Http Connection Manager Editor 中选择 "Server" 选项卡,并进行以下设置:

- 输入 Server URL(在本例中为 https://:8000/PlayerName?wsdl)

- 输入凭据,即用户名、密码、域(可选)

5.jpg

最后单击 OK。

(b) 配置 WSDL 文件字段

WSDL File 字段中,让我们从保存的位置选择 PlayerList.wsdl 文件。

(c) 配置 OverwriteWSDLFile 字段

此字段需要设置为 TRUE

完成此操作后,单击 Download WSDL 按钮。如果一切顺利,您将收到下载成功的消息。

6.jpg

步骤 4: 在 Input 选项卡提供的输入屏幕中,让我们为以下项输入信息:

(i) Service

(ii) Corresponding Web method

7.jpg

步骤 5: 在 Output 选项卡提供的输出屏幕中,我们将 OutputType 设置为文件连接,然后指定文件名。

8.jpg

最后,单击 OK 按钮。

步骤 6: 生成并运行包。

9.jpg

现在打开 Outputfile.txt,内容(部分)如下:

10.jpg

这表明它正在工作。

结论

在本文中,我们学习了如何创建 HTTP Endpoint、配置 Web 服务任务以及最终通过 Web 服务任务调用 Web 服务。Web 服务也可以使用脚本组件进行调用,这部分内容我们可以在其他文章中讨论。希望对您有帮助!

感谢阅读本文。

© . All rights reserved.