正 文

避免混淆数据集合和Web服务


www.7dspace.com  更新日期:2005-9-14 7:12:21  七度空间


  Microsoft .NET架构使得开发者可以使用Web服务快速的构建松耦合的系统。除了Web服务,.NET架构还提供了其他的好处给开发者。也学在.NET架构中的最重要的类集之一就是ADO.NET。通过ADO.NET,开发者可以比原来更加轻松的有效处理分离的数据。它也允许数据来维护关联和参考内容的整体性。

  所以可以很自然地看到,一个同一个数据库协作的.NET Web服务想要利用ADO.NET的在处理分离数据特征上面的优势,特别是DataSet类。许多的.NET Web服务演示已经完成了这些,创造了一个可以返回一个被某种UI使用的数据集的Web 服务,这个服务也是用.NET开发的,它可以十分容易的把数据和控制邦定。

      <s:element name="GetCustomersResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="GetCustomersResult">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>

  为了衡量整个的解决方案,开发者需要明白的是Web服务是有意要去创造功能的不可知的技术集合——对任何的客户,使用任何的技术,都可以使用在那个服务中包含的特征。为此成为一个好的Web服务,它应该可以为其它的技术使用。让我们看看一个能够返回数据集的简单的Web服务的细节,同时看看它是如何符合标准的。

  在创建了一个简单的可以返回数据集的Web方法之后,看看由.NET架构生成的WSDL(Web 服务描述语言)。记住WSDL描述了这个服务,包括方法的名字,参数和返回值。这个数据会被.NET 架构的WSDL.exe工具使用,同其他技术的工具一起来创建一个为客户访问服务时使用的端口类。。这种类型的一个细节性的描述被当成参数和返回值来使用,这对产生一个有用的端口类是必要的。

  下面是一个简单的Web服务的WSDL中的一个摘要,它显示了GetCustomers Web方法的返回值。注意到GetCustomersResult实际上是有两种类型来组成的——第一种是一个XML模式,第二种是一个类型。当这个方法被执行,它将会返回一个模式来描述结果,同时这个结果本身就可能是任何的类型。这就是WSDL等效的后邦定。

  第一个问题是任何的试图为服务产生一个端口的工具根本没办法知道应该期待什么。类型确认将会在运行时被执行。

  那么.NET架构是如何知道什么时候应该把结果转化为客户端口的数据集?关键是在于调用产生的实际的XML 。下面是一个在Web方法被调用并且只有一行被返回的时候返回的XML的一个子集

<DataSet xmlns="http://tempuri.org/BadWS/Service1">
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true">
      <xs:complexType>
        <xs:choice maxOccurs="unbounded">
          <xs:element name="Table1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="FirstName" type="xs:string" minOccurs="0" />
                <xs:element name="LastName" type="xs:string" minOccurs="0" />
                <xs:element name="Age" type="xs:int" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
    xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
    <NewDataSet xmlns="">
      <Table1 diffgr:id="Table11" msdata:rowOrder="0"
     diffgr:hasChanges="inserted">
        <FirstName>Paul</FirstName>
        <LastName>Ballard</LastName>
        <Age>32</Age>
      </Table1>
    </NewDataSet>
  </diffgr:diffgram>
</DataSet>
2页,当前在第1页  1  2  

上一篇:J2EE中的异常管理及错误跟踪
下一篇:Weblogic中使用Servlet
作者:Paul Ballard  来源:TechTarget ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐