ASP.NET中利用SQLXML WEB服务访问XML数据




  SQLXML 是扩展SQL 服务器现有对检索和储存XML 数据支持套附加工具 有了SQLXML 3.0你现在就能使用SQL服务器展示Web 服务了在SQLXMLWeb 服务可以让用户执行存储过程用户定义功能并且它们支持模板
  
  在这篇文章中你将看出怎样展示个作为Web 服务并构建个简单ASP.NET 基于Web 表单客户端并访问和测试Web 服务存储过程 你应该有对SQL Server 2000和IIS 基本理解包括如何在IIS中安装虚拟目录以及怎样在SQL Server中设置用户许可 你可以在 SQL Server 2000 Books _disibledevent=>
  配置 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:"
  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="Value"
  type="xsd:" 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 个Control控件到默认Web表单上去: 个带有ID btnRequest 按钮和两个TextBox Control控件个是ID txtOrderID 个是ID txtResponse 设置txtResponse TextBoxControl控件TextMode属性为 MultiLine 以便支持从Web服务中返回XML应答表单应该像图2那样
   
  在添加Control控件的后你将需要给你刚刚建立Web 服务添加个引用 为了做到这在VS. NET中点击Solution Explorer窗口中References文件夹在References文件夹上用右键点击然后Add Web Reference菜单选项(见图3)
  
  你选择URL 参考你以前创建Web 服务 注意我使用服务器名为localhost参考我IIS 本地例子虚拟目录路径是nwind对于Northwind数据库虚拟目录Web 服务名为MyWebService如果你没有使用台本地服务器你将需要在URL 里用你服务器名或者IP 地址代替
  
  Web服务
  
  在创建ASP.NET工程的后你需要添加代码来Web 服务 你想要应用Web 服务可以CustOrdersDetail 思路方法并且处理当用户点击按钮以后返回XML结果集添加以下代码到btnRequest_Click事件
  
  (C# 代码)
  
  private void btnRequest_Click(object sender,
  .EventArgs e)
  {
  
   iOrderID;
   Value = 0;
   j = 0;
  
  iOrderID = Convert.ToInt32(txtOrderID.Text);
  localhost.MyWebService proxy =
   localhost.MyWebService;
  
  object results;
  results = proxy.CustOrdersDetail(iOrderID,
  out Value);
  
  .Xml.XmlElement result;
  result = (.Xml.XmlElement) results[j];
  
  txtResponse.Text = result.OuterXml.;
  
  }
  (VB.Net code)
  Private Sub btnRequest_Click _
  (ByVal sender As .Object, _
  ByVal e As .EventArgs) _
  Handles btnRequest.Click
  
  Dim iOrderID As Int32
  Dim Value As Int16 = 0
  Dim j As Int16
  Dim proxy As New localhost.MyWebService
  Dim results As New Object
  Dim result As .Xml.XmlElement
  
  iOrderID = Convert.ToInt32(txtOrderID.Text)
  
  results = proxy.CustOrdersDetail _
  (iOrderID, Value)
  result = results(j)
  
  txtResponse.Text = result.OuterXml.
  
  End Sub
  
  Web 服务CustOrdersDetail 思路方法执行同名存储过程 这个思路方法返回个对象那些物体本身可能是XmlElement 或者SqlMessage 类型 这些类型在你Web 服务相关WSDL 文件里定义 XmlElement 类型对象包括从执行存储过程用户定义或SQLXML服务器上模版返回结果 SqlMessage 对象包括从SQLXML 服务器返回任何信息 你可以像下面所列代码样在对像中引用XmlElement类型:
  
  (C# code)
  
  result = (.Xml.XmlElement) results[j];
  txtResponse.Text = result.OuterXml.;
  (VB.Net code)
  result = results(j)
  txtResponse.Text = result.OuterXml.
  
  这段代码检索对象基础元素并且把它强制转换成XmlElement 对象类型 然后它展示了设置在Web表单上XML结果是通过把txtResponseControl控件上Text属性设置为 XmlElement对象OuterXml属性执行样本代码时候在txtOrderID文本框中输入参数10250(Northwind数据库内OrderID键对应) . 当你点击按钮时返回XmlElement中就包含了下面XML 数据:
  
  <SqlXml>
  <row ProductName="Jack's New England Clam Chowder"
  UnitPrice="7.7"
  Quantity="10" Discount="0"
  ExtendedPrice="77" />
  <row ProductName="Manjimup Dried Apples"
  UnitPrice="42.4" Quantity="35" Discount="15"
  ExtendedPrice="1261.4" />
  <row
  ProductName="Louisiana Fiery Hot Pepper Sauce"
  UnitPrice="16.8" Quantity="15" Discount="15"
  ExtendedPrice="214.2" />
  </SqlXml>
  
  注意在父标签<SqlXML>下<row>元素包含属性ProductName UnitPriceQuantity, Discount和ExtendedPrice和CustOrdersDetail存储过程选定和计算字段的间对应如果在使用命令行执行方式CustOrdersDetail ' 10250 ' 在SQL 查询分析器应用中测试你将看见那个那些数据 这些数据在XmlElement 里包含数据所对应结果集里SQLXML 也能执行模板
Tags: 

延伸阅读

最新评论

发表评论