.net Delphi webService,它像MS webService一样返回数据集
我在DelphiXE中创建了一个Web服务来连接我的ERP数据库并返回XML。 我创建了使用我的Web服务的客户端。全部完美,可与1000名用户完美配合 从另一家企业,他们在.NET中创建了相同的Web服务,并遵循我的规范,返回相同的plains XML,我的客户端应用程序完美地使用了这两个Web服务,就像它是一样的 他们制作了另一个客户端,并在他们的Web服务中放置了其他功能,即返回.NET数据集 现在我必须实现相同的函数并以相同的.NET样式返回数据集 我该怎么做? 如何转换XML.NET样式的数据集.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样
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文档,并就此提出具体问题。向人们展示你的尝试,他们会尝试帮助你。