Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Delphi webService,它像MS webService一样返回数据集_.net_Delphi_Dataset - Fatal编程技术网

.net Delphi webService,它像MS webService一样返回数据集

.net Delphi webService,它像MS webService一样返回数据集,.net,delphi,dataset,.net,Delphi,Dataset,我在DelphiXE中创建了一个Web服务来连接我的ERP数据库并返回XML。 我创建了使用我的Web服务的客户端。全部完美,可与1000名用户完美配合 从另一家企业,他们在.NET中创建了相同的Web服务,并遵循我的规范,返回相同的plains XML,我的客户端应用程序完美地使用了这两个Web服务,就像它是一样的 他们制作了另一个客户端,并在他们的Web服务中放置了其他功能,即返回.NET数据集 现在我必须实现相同的函数并以相同的.NET样式返回数据集 我该怎么做? 如何转换XML.NET样

我在DelphiXE中创建了一个Web服务来连接我的ERP数据库并返回XML。 我创建了使用我的Web服务的客户端。全部完美,可与1000名用户完美配合

从另一家企业,他们在.NET中创建了相同的Web服务,并遵循我的规范,返回相同的plains XML,我的客户端应用程序完美地使用了这两个Web服务,就像它是一样的

他们制作了另一个客户端,并在他们的Web服务中放置了其他功能,即返回.NET数据集

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

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


TIA.

我不是在回答你的直接问题,而是提供了一个更好的解决方案

原因是,虽然返回一个简单的
System.Data.DataSet
不是一个好主意,但它是一种显示概念证明的实用方法

作为副业:

我从未找到
TClientDataSet
System.Data.DataSet
转换器 或者反过来说。如果有人找到了,请发表评论

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

为了实现这一点,Delphi有一个可以从
TClientDataSet
映射到
XML
并返回的尽管很老,但这仍然是一个很好的例子。这方面的另一个重要信息来源是


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

下面显示的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>

...
201-登入高。
我需要从我的Delphi Web服务生成这个。 我的问题是Delphi中是否有任何自动方式(组件或类似的方式)直接从数据集生成主体


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

没有这样的事。NET默认情况下不返回数据集。实际上,返回裸数据集被认为是一种非常糟糕的做法,因为它使得互操作性几乎不可能,并且用大量不必要的信息来处理实际负载。ASMX或WCF服务应该包含正确的数据和操作契约,将其数据映射到这些类并公开它们。如果它们组成/开始使用其他交换格式,它们应该告诉您结构是什么。你应该告诉我们,格式由你和其他开发者来协调结构。Delphi中没有内置的.NET结构,因为Delphi不是.NET语言。看看这个格式是如何构造的,然后写一些解释它的东西。如果没有更多的信息,这个问题是无法回答的。当然,没有现成的工具可以在两种定制数据格式之间进行转换,而且由于您没有告诉我们有关目标格式的任何信息,我们也无法提供任何指导。目前的问题是
如何将XML转换为未定义的格式?
。唯一合理的答案是从第一步开始——确定目标格式是什么。如果你知道,你必须告诉我们。如果你不知道,那么你必须找出它是什么。非常感谢。。。这是我脑子里的想法,但我不知道怎么做。。。你给我亮灯!!!再次非常感谢…@JosepMaria在新的和特定的问题中提出这些问题,如“我有这个和这个信息需要从web服务转到web客户端。我如何为此设计XSD”。然后阅读XMLMapper文档,并开始询问相关的具体问题。最后,阅读有关将XML映射到System.Data.DataSet的.NET文档,并就此提出具体问题。向人们展示你的尝试,他们会尝试帮助你。