2013-08-20 112 views
-1

我在Delphi XE中創建了一個WebService連接到我的ERP數據庫並返回平原XML。 我做了使用我的web服務的客戶端。全部完美,與1000位用戶完美配合。Delphi webService返回數據集像MS Webservice

從另一家企業他們.NET總犯同樣的web服務,並按照我的規格,返回相同的平原XML和我的客戶端應用程序消耗完全web服務都喜歡它是一樣的。

他們做了另一個客戶,他們已經把其他功能,在他們的web服務,這就是返回.NET數據集。現在

我必須實現相同的功能,在同一個.NET風格返回的數據集。

我該怎麼做? 如何以XML .NET風格轉換我的數據集?

TIA。

+1

有沒有這樣的事情。 .NET不會默認返回數據集。實際上,它被認爲是**非常糟糕的做法**返回一個裸數據集,因爲它使互操作性幾乎不可能,並通過大量不必要的信息來污染實際的有效負載。 ASMX或WCF服務應該有適當的數據和操作契約,將其數據映射到這些類並公開它們。 –

+1

如果他們補充/開始使用其他交換格式,他們應該告訴你結構是什麼。你應該告訴我們。 –

+1

格式取決於您和其他開發人員協調結構。 Delphi中沒有內置的.NET結構,因爲Delphi不是.NET語言。只要看看這種格式是如何構建的,並寫出解釋它的東西。 –

回答

1

我沒有回答你的直接問題,但提供了一個更好的解決方案的替代方案。

的原因是,雖然它不是返回一個普通System.Data.DataSet一個好主意,它是顯示概念的證明以務實的方式。

爲副業:

我從來沒有發現一個TClientDataSetSystem.Data.DataSet轉換器 或周圍的其他方法。如果有人發現,請發表評論。

「正確」的方式在Web服務做解析數據定義要(通過定義XSD它例如)從你的web服務返回到客戶端的XML結構,然後使用XSD/XML映射從Delphi webservice返回XML

爲了得到這個工作,德爾福有一個XML Mapper tool,可以從TClientDataSet映射到XML和回來。 This article - 雖然老了 - 仍然是如何做到這一點的一個很好的例子。另一個很好的信息來源是this series of book chapters

在要到XML映射到System.Data.DataSet .NET方面。一篇很好的文章是here

+1

非常感謝...這是我在我腦海中的方式,但我不知道該怎麼做...你給我看光!很多再次感謝... – JosepMaria

+0

@JosepMaria在新的具體問題中提出這些問題,例如「我有這個和這個信息需要從一個web服務轉到一個web客戶端,我該如何爲這個設計一個XSD」。然後閱讀XML Mapper文檔,並開始提出有關該問題的具體問題。最後,請閱讀關於將XML映射到System.Data.DataSet的.NET文檔,並詢問具體的問題。向人們展示你所嘗試過的東西,他們會盡力幫助你。 –

0

下顯示的XML是.NET

<?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> 

我需要從我的德爾福web服務生成此提出的其他web服務的響應。 我的問題是關於如果在Delphi中有任何自動方式(組件或類似的東西)直接從數據集生成主體。

現在我正在尋找從定義XSD生成XML的告訴我的Jeroen Wiert Pluimwers。 (再次感謝)