在 SQL Server 中,MS向数据库引擎中添加了对本机 XML Web 服务的支持。现在我让我们来看一下它的功能。本机 XML Web 服务提供了以下特性:
? 异类环境支持:本机 XML Web 服务是围绕众所周知的标准(如 SOAP 1.2、WSDL 1.1 ,WS-Security和 HTTP)设计的。将解决方案建立在这些标准之上,可以在大多数企业都拥有的异类环境中支持互操作性和服务扩张。这正是现在很多大企业所需要的。
? 安全性:对WS-Security的支持,可以提供高级的安全性。
? 更易于公开 Web 服务:添加到 SQL Server 中的新的基础结构大大有利于直接向服务器外部公开 Web 服务,这是因为将本机 SOAP 堆栈内置到数据库引擎中消除了使用中间层进程(如 IIS)达到这一目标的需要。
? 参与面向服务的体系结构:本机 XML Web 服务使 SQL Server 能够作为组件参与面向服务的体系结构,因为服务在这些新的体系结构中提供了黏合剂。本机 XML Web 服务使您既可以将存储过程作为 Web 服务公开,而且可以针对数据库服务器执行特殊的 T-SQL 语句。本机 XML Web 服务通过使得将存储过程公开为 Web 服务变得非常容易来利用这一投资。
? 提高性能:本机 Web 服务可以提高性能,因为数据访问是在进程内发生的,而不是被发送到中间层进程。大多数数据库应用程序都在存储过程中内置了大量以数据为中心的逻辑,这种情况下使用内置的Web服务可以大大提高SQL Server 性能。
实际上,微软已经基于 SOAP 创建了一种新的访问 SQL Server 的机制;SOAP 提供了与当前的 Tabular Data Stream (TDS) 专用二进制协议几乎相同的功能。它可以广泛的应用于以下环境:
移动方案
现在,有了SQL Server 2005的本机 XML Web 服务,任何能够分析 XML 和提交 HTTP 请求的设备都可以访问 SQL Server。有了这一前提,非常适合于为移动设备和不定时连接的设备开发应用程序,而这又使得随时、随地访问 SQL Server 成为可能。
异步服务
可以将本机 Web 服务与 SQL Service Broker(也通过 SQL Server 提供,这个我们以后会有讲解)结合使用,以便构建提供异步服务的解决方案。因为现在很多程序都需要使用异步的解决方案。
请考虑一个订单处理工作流。由于要进行库存检查,信用卡确认之类的过程,所以需要很长时间,但是我们不能让用户在我们把这些所有的工作都做完才能用户反馈,此时我们就要考虑使用异步的解决方案。我们可以公开一个 SQL Server Web 服务,该服务接收订单,并且通过立即确认它已经收到了该订单进行响应。然后,可以将该订单输入到服务代理程序队列中,以便进行处理。在履行该订单时,我们可以使用客户端已经预订的任何通知机制来通知该客户端。这样用对户就更容易接受。
下面是个例子,我们将把一个电子商务网站中的用户已经订购的次数发布为一个Web Services,并通过一个简单的客户端代码来调用此Web Services:
--- 以下的用户自定义函数可以返回一个客户已经订购的次数,另外在SQL Server2005中的用户自定义函数已经可以直接返回BLOG数据类型。
USE AdventureWorks
GO
CREATE FUNCTION EmployeeOrderCount(@EmpID INT)
RETURNS INT
AS
BEGIN
RETURN
(
SELECT COUNT(*) AS 'Employee Order Count'
FROM Purchasing.PurchaseOrderHeader
WHERE EmployeeID = @EmpID
GROUP BY EmployeeID
)
END
GO
--- 把上面的存储过程发布为一个Webservices
CREATE ENDPOINT AdvEnd ---Endpoint名字
STATE = STARTED
AS HTTP
(
SITE = 'localhost', ---Server name
PATH = '/AdvEnd',
AUTHENTICATION = ( INTEGRATED ),
PORTS = ( CLEAR )
)
FOR SOAP
(
WEBMETHOD 'GetEmployeeOrderCount'
(
NAME = 'AdventureWorks.dbo.EmployeeOrderCount',
SCHEMA = STANDARD
),
WSDL = DEFAULT,
BATCHES = DISABLED,
DATABASE = 'AdventureWorks'
)
下面我们来看一下这个Web Service的WSDL定义,打开一IE,在地址栏中输入http://localhost/advend?wsdl。
以后我们在开发中就可以直接使用增加一个Web引用来使用此Webservices.新建一个C#Console 项目,加入一个Web引用,命名为advend.加入如下代码:
advend.AdvEnd ws = new advend.AdvEnd();
ws.Credentials =
new System.Net.NetworkCredential("Administrator", "XXXX");
int input = int.Parse(Console.ReadLine());
try
{
while (input != 0)
{
int result = (int)ws.GetEmployeeOrderCount(input);
Console.WriteLine(result);
input = int.Parse(Console.ReadLine());
}
}
catch (Exception e1)
{
Console.WriteLine(e1.Message.ToString());
Console.Read();
}
现在运行,我们就可以看到一个最简单的SQL Server 2005 Web services 例子。
补充几点:
SQL Server 2005支持的SOAP WebService not ASP.NET XML Web Service。这还是有一点不一样的。我们通过在.NET Project中Add Web Reference可以直接使用,但是功能是有限的,有一些功能使用这个方法无法实现,例如Sessions/Transaction,需要自定义SOAP消息实现SessionID&TransactionID。
C:/>makecert -r -pe -n "CN=MySQLServer" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localm
achine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
httpcfg set ssl /i 10.10.10.1:443 /h /g