使用SQL2000将现有代码作为Web服务提供

作者:limeinan 时间:2009-02-19 17:20:00 

SQL Server 2000 的 XML 功能可以简化将现有代码作为 Web 服务提供的任务。本文集中讨论了传入和传出 Transact SQL 代码的数据与 XML 消息(在 Web 服务客户机和服务器之间使用)之间的转换。

评估现有代码是否适合于作为 Web 服务提供时,本文讨论的数据转换问题并不是唯一需要考虑的问题。应考虑的其它因素包括状态模型、返回的数据大小、如何表示已经成功、如何返回错误信息、安全模型(包括访问控制、身份验证和加密)、执行模型(同步或异步)、如何分发代码,以及事务模型(COM+ 事务或声明事务),等等。这些问题将在即将发表的体系结构主题(英文)文章中进行讨论。

SQL Server 2000 中的现有代码

SQL Server 2000 的 XML 功能简化了将现有 Transact SQL 代码作为 Web 服务提供的过程。这依赖于 SQL Server 2000 中的两项 XML 功能:

对 Transact SQL 的扩展可将关系型数据转换为 XML,并且可以对传入的 XML 进行语法分析。

利用 ISAPI 模板功能,可将传入的 HTTP 请求应用于 Transact SQL 代码,并且可以使用 XSL 样式表对传出的 XML 进行转换。只要可以使用 FORXML 子句“选定”数据,SQL Server 就可以将 XML 返回到 XML 模板。

SQL Server 2000 XML 模板

SQL Server 2000 XML 模板以透明方式执行以下任务:

对传入的 HTTP 请求进行解码

将参数应用于 Transact SQL 查询

执行查询

使用 XSL 转换传出的 XML

读数据

以下示例执行 ISAPI 模板中指定的 Transact SQL。如果必要,可将 HTTP 请求传递到 Transact SQL 代码,并由该代码进行语法分析。根据模板中指定的 .xsl 文件,返回的 XML 将被转换为 SOAP 并返回给 Web 服务的客户:

<ROOT

xmlns:sql="urn:schemas-microsoft-com:xml-sql"

sql:xsl="BDAdotNetWebService3Example1.xsl">

<Orders>

<sql:query>

Exec GetOrdersXML

</sql:query>

</Orders>

</ROOT>

以下是模板中引用的 XSL 样式表,它将存储过程中的 XML 转换为 SOAP:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:m="Some-URI">

<xsl:template match="/">

<SOAP-ENV:Envelope>

<SOAP-ENV:Body>

<m:BDAdotNetWebService3Example1Response >

<xsl:copy-of select="//Orders"/>

</m:BDAdotNetWebService3Example1Response>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

</xsl:template>

</xsl:stylesheet>

最后,以下存储过程代码在 Transact SQL SELECT 语句中使用 FOR XML EXPLICIT 子句来返回 XML。&ldquo;订单&rdquo;和&ldquo;订单详细信息&rdquo;从单独的表中选择,然后合并到 XML 层次中:

标签:SQL2000,Web服务
0
投稿

猜你喜欢

  • 科讯cms文章分页列表页码样式的修改

    2008-07-10 13:11:00
  • asp网上购物车实例代码

    2007-10-03 13:43:00
  • asp被杀毒软件误删的解决方法

    2011-04-11 11:16:00
  • Google logo “我的中国”谷歌国际少年绘画大赛小学1-3年级

    2008-12-19 12:26:00
  • 用画为5.12地震受灾同胞们祈福 Ⅱ

    2008-05-31 07:37:00
  • 使用ewebeditor可能会重复提交数据两次的解决办法

    2009-01-09 12:41:00
  • sqlserver 数据库压缩与数据库日志(ldf)压缩方法分享

    2012-01-05 18:57:19
  • SQL Server和MySql中创建临时表

    2008-06-19 13:31:00
  • 学习ASP.NET八天入门:第五天

    2007-08-07 13:43:00
  • 用来武装Firefox的24款Web开发插件

    2010-02-28 12:40:00
  • 如何绝对获知浏览器类型?

    2009-12-16 18:58:00
  • 减少新开窗口提升可访问性

    2009-04-17 13:56:00
  • 后工业时代的后规范思考

    2009-06-03 20:30:00
  • CSS教程:轻松解决表格的nobr问题

    2008-10-29 11:55:00
  • 用server.transfer隐藏网页真实地址

    2007-12-04 13:02:00
  • 由黄钻等级图标处理引发的思考

    2009-11-16 12:37:00
  • JavaScript中的"类" 序言

    2008-02-18 13:26:00
  • 在ASP中改善动态分页的性能

    2008-05-08 14:27:00
  • 概念性产品设计

    2008-06-11 12:57:00
  • 在Oracle中向视图中插入数据的方法

    2009-02-28 10:42:00
  • asp之家 网络编程 m.aspxhome.com