返回数据集的Delphi webService类似于MS Webservice

时间:2013-08-20 13:44:08

标签: .net delphi dataset

我在Delphi XE中创建了一个WebService来连接到我的ERP数据库并返回平原XML。 我创建了使用我的web服务的客户端。完美,与1000名用户完美配合。

从另一家企业,他们在.NET中制作了相同的Web服务,并遵循我的规范,返回相同的平原XML,我的客户端应用程序完全消耗两个Web服务,就像它一样。

他们已经创建了另一个客户端,他们已经在其Web服务中放置了其他功能,即返回.NET数据集。

现在我必须实现相同的函数并以相同的.NET样式返回数据集。

我该怎么做? 如何以XML .NET样式转换数据集?

TIA。

2 个答案:

答案 0 :(得分:1)

我没有回答你的直接问题,而是提供更好的解决方案。

原因在于,尽管回归普通System.Data.DataSet并不是一个好主意,但这是一种表达概念证明的实用方法。

  

作为副业:

     

我从未找到TClientDataSetSystem.Data.DataSet转换器   或者相反。如果有人找到,请发表评论。

通过Web服务解析数据的“正确”方法是定义要从Web服务返回到客户端的XML结构(例如通过为其定义XSD),然后使用XSD / XML映射从Delphi webservice返回XML

为了实现这一目标,Delphi的XML Mapper tool可以从TClientDataSet映射到XML并返回。 This article - 虽然陈旧 - 仍然是如何做到这一点的一个很好的例子。另一个涉及此问题的重要信息来源是this series of book chapters

在.NET端,您希望将XML映射到System.Data.DataSet。一篇很好的文章是here

答案 1 :(得分:0)

显示的xml是.net

中其他Web服务的响应
<?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
      <NotMyWS_Header xmlns="http://NotMyWebService.ServiceName/ServiceName/ServiceName.asmx">
        <Version />
    ...
        <mensageStatus>201 - Login KO.</mensageStatus>
      </NotMyWS_Header>
    </soap:Header>
    <soap:Body>
      <ArticleBrandResponse xmlns="http://NotMyWebService.ServiceName/ServiceName/ServiceName.asmx">
        <ArticleBrandResult>
          <xs:schema id="ArticleBrand" 
                     targetNamespace="http://NotMyWebService.ServiceName/ArticleBrand.xsd" 
                     xmlns:mstns="http://NotMyWebService.ServiceName/ArticleBrand.xsd" 
                     xmlns="http://NotMyWebService.ServiceName/ArticleBrand.xsd" 
                     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
                     xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" 
                     attributeFormDefault="qualified" 
                     elementFormDefault="qualified">
            <xs:element name="ArticleBrand" 
                msdata:IsDataSet="true" 
                msdata:UseCurrentLocale="true">
              <xs:complexType>
                <xs:choice minOccurs="0" 
                           maxOccurs="unbounded">
                  <xs:element name="Brand">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="bra_id" 
                                    type="xs:string" 
                                    default="" 
                                    minOccurs="0" />
                        <xs:element name="bra_as_id" 
                                    type="xs:string" 
                                    default="" 
                                    minOccurs="0" />
                        <xs:element name="bra_name" 
                                    type="xs:string" 
                                    default="" 
                                    minOccurs="0" />
                        <xs:element name="bra_as_name" 
                                    type="xs:string" 
                                    default="" 
                                    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" />
        </ArticleBrandResult>
      </ArticleBrandResponse>
    </soap:Body>
  </soap:Envelope>

我需要从我的Delphi Webservice生成这个。 我的问题是关于Delphi中是否有任何自动方式(组件或类似的东西)直接从数据集生成主体。

现在我正在寻找从定义的xsd生成XML,告诉我Jeroen Wiert Pluimwers。 (再次感谢)