日期:2013-09-17  浏览次数:20432 次

作者:郑伟·YESKY 2002-4-23 19:40:11
[被查看:]44次]    (推荐作品)

  引言 使用SQLXML 的Web 服务从你的ASP.NET应用程序中直接访问XML 数据

  SQLXML 是扩展SQL 服务器现有的对检索和储存XML 数据的支持的一套附加的工具。 有了SQLXML 3.0,你现在就能使用SQL服务器展示Web 服务了。在SQLXML的Web 服务可以让用户执行存储过程,用户定义的功能,并且它们支持模板。

  在这篇文章中,你将看出怎样展示一个作为Web 服务并构建一个简单ASP.NET 基于Web 表单的客户端并访问和测试Web 服务的存储过程。 你应该有对SQL Server 2000和IIS 基本的理解,包括如何在IIS中安装虚拟目录以及怎样在SQL Server中设置用户许可。 你可以在 SQL Server 2000 Books Online 和SQLXML 3.0 Documentation 中找到相关的主题。在此之前,你需要一个SQL Server 2000 的实例,一台运行IIS的Windows 2000 服务器,微软公司的MSXML 4.0 XML 语法分析程序, SQLXML 3.0 工具箱,以及Visual Studio .NET( VS.NET)。

  配置Web服务

  本文的所使用的示范应用程序是SQL Server服务器默认安装的Northwind 样本数据库。 我们要开始本文要讨论的问题,但是我们必须遵循下载的SQLXML 3.0 installer中所附带的SQLXML 3.0 技术资料里的教学指示。首先,执行在SQLXML 3.0 文献中的标记为Creating the nwind Virtual Directory 的过程程序。 到SQLXML 3.0程序组下的Configure IIS Support MMC 内嵌应用程序。选择默认的服务器的网址,到Action菜单并且选择New,然后点击虚拟目录。 在IIS 下创建一个名为nwind的虚拟目录,支持访问Northwind 数据库的SQLXML应用程序。 配置安全设置来支持虚拟目录应用程序对Northwind 数据库的访问。 在设置选项中,选定AllowPost选项。 这样能够允许HTTP POST请求,以便支持SQLXML 网络。 在虚拟目录下,你可以配置不同类型的SQLXML 应用程序,包括模板, schemas 和dbobjects,支持模板执行, 对映射schema 文件的Xpath查询和不同数据库对象的直接的访问。 在虚拟目录下的这些不同类型的应用程序被称为virtual name(虚拟名称)类型。 还有用来标识使用SOAP消息发送的Web服务的SOAP虚拟名称类型。 创建一个SOAP虚拟名称类型,并把它命名为MyWebService(见图1)。现在你需要按照标记为Step 2的部分中所说的步骤做: Configuring the Virtual Name under the topic Initial Setup for Sending SOAP Requests。

  键入MyWebService作为 新的虚拟目录应用程序的名称,并选择虚拟名称类型为SOAP( 见图一)。 这样就建立了一个对Northwind数据库的Web 服务扩展的引用。

  配置 MyWebService

  为你的Web 服务创建一个WSDL( Web 服务定义语言) 文件和一个SQL 服务器配置(.ssc) 配置文件。 ssc 文件描述了虚拟名称类型配置,并且SQLXML 使用它来生成WSDL 文件。 而WSDL 文件描述了Web 服务以及当使用Web服务时你的应用程序可以调用的方法。

  在设置一个SOAP虚拟名称类型之后,选择SQLXML 3.0 的IIS 虚拟目录管理工具下面的虚拟名称选项卡中的配置选项。 为了设置一个存储过程方法映射用于你的SOAP虚拟名称类型,选择SP/Template选项下面的CustOrdersDetail存储过程,然后选择Save选项。在完成这步之后,浏览你的nwind虚拟目录并寻找名为soap.wsdl的文件,这个文件是XML格式的WSDL 文件,描述了你配置的服务。 我们可以在任何一个文本编辑程序里打开,文件可能会象这样:

<xsd:element name="CustOrdersDetail">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1"
name="OrderID" type="xsd:int"
nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CustOrdersDetailResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1"
name="CustOrdersDetailResult"
type="sqlresultstream:SqlResultStream"/>
<xsd:element name="returnValue"
type="xsd:int" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

  这段由SQLXML生成的CustOrdersDetail WSDL 文件片段(SOAP.wsdl),向我们展示了CustOrdersDetail 方法的配置,包括输入和输出参数的定义。

  构造ASP.NET 客户端

  在配置完SQLXML Web 服务之后,你需要开发一个客户应用程序来访问这个服务并且执行它的任何操作。 首先,创建一个新的C # 或VB.Net ASP.NET Web 应用程序并把它命名为WebServiceClient。你需要添加3 个控件到默认的Web表单上去: 一个带有ID btnRequest 的按钮,和两个TextBox 控件,一个是ID txtOrderID ,另一个是ID txtResponse。 设置txtResponse TextBox控件的TextMode属性为 MultiLine 以便支持从Web服务中返回的XML应答。表单应该像图2那样。


  在添加控件之后,你将需要给你刚刚建立的Web 服务添加一个引用。 为了做到这一点,在VS. NET中,点击Solution Explorer窗口中的References文件夹,在References文件夹上用右键点击,然后Add Web Reference菜单选项。(见图3)


  你选择的URL 参考你以前创建的Web 服务。 注意我使用的服务器名为localhost,参考我的IIS 的本地实例,虚拟目录路径是nwind,对于Northwind数据库虚拟目录,Web 服务名为MyWebService。如果你没有使用一台本地服务器,你将需要在URL 里用你的服务器名或者IP 地址代替。


  调用Web服务