我在Delphi XE中创建了一个WebService来连接到我的ERP数据库并返回平原XML。 我创建了使用我的web服务的客户端。完美,与1000名用户完美配合。
从另一家企业,他们在.NET中制作了相同的Web服务,并遵循我的规范,返回相同的平原XML,我的客户端应用程序完全消耗两个Web服务,就像它一样。
他们已经创建了另一个客户端,他们已经在其Web服务中放置了其他功能,即返回.NET数据集。
现在我必须实现相同的函数并以相同的.NET样式返回数据集。
我该怎么做? 如何以XML .NET样式转换数据集?
TIA。
答案 0 :(得分:1)
我没有回答你的直接问题,而是提供更好的解决方案。
原因在于,尽管回归普通System.Data.DataSet
并不是一个好主意,但这是一种表达概念证明的实用方法。
作为副业:
我从未找到
TClientDataSet
到System.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。 (再次感谢)