2013-08-20 2 views
-1

Delphi XE에서 WebService를 작성하여 ERP 데이터베이스에 연결하고 일반 XML을 반환합니다. 웹 서비스를 사용하는 클라이언트를 만들었습니다. 모두 완벽하며 1000 명의 사용자와 완벽하게 작동합니다.데이터 집합을 반환하는 Delphi webService

다른 엔터프라이즈에서 .NET에서 동일한 웹 서비스를 만들었고 내 사양에 따라 동일한 평원의 XML을 반환하고 클라이언트 응용 프로그램은 동일하게 두 웹 서비스를 완벽하게 사용합니다.

그들은 다른 클라이언트를 만들었고 그들은 다른 기능을 자신의 웹 서비스에 넣어서 .NET 데이터 집합을 반환합니다.

동일한 .NET 스타일로 동일한 함수 및 데이터 세트를 구현해야합니다.

어떻게하면됩니까? XML .NET 스타일로 데이터 세트를 변환하려면 어떻게해야합니까?

TIA.

+1

그런 것은 없습니다. .NET은 기본적으로 데이터 집합을 반환하지 않습니다. 실제로 그것은 상호 운용성을 거의 불가능하게 만들고 불필요한 정보가 많은 실제 페이로드를 조사하기 때문에 누출 된 데이터 집합을 반환하는 ** 매우 나쁜 관행 **으로 간주됩니다. ASMX 또는 WCF 서비스는 적절한 데이터 및 작업 계약이 있어야하며 데이터를 이러한 클래스에 매핑하고 노출합니다. –

+1

다른 교환 형식을 사용하여 구성하거나 시작하면 구조가 무엇인지 말해야합니다. 그리고 우리에게 말해야합니다. –

+1

형식은 사용자와 다른 개발자가 구조 조정에 달려 있습니다. Delphi는 .NET 언어가 아니기 때문에 Delphi에 내장 된 .NET 구조는 없습니다. 이 형식이 어떻게 구성되어 있는지 살펴보고이를 해석하는 것을 작성하십시오. –

답변

1

나는 직접적인 질문에 답하지 않고 있지만 더 나은 해결책을 제시하고 있습니다.

왜냐하면 일반 System.Data.DataSet을 반환하는 것은 좋지 않지만 개념 증명을 보여주는 실용적인 방법이기 때문입니다. 부업으로

는 :

내가 찾은 적이없는 TClientDataSet 변환 또는 다른 방법으로 주위 System.Data.DataSet합니다. 누군가 찾으면 의견을 게시하십시오.

Web 서비스를 통해 구문 분석 데이터를 수행하는 "올바른"방법은 당신이 (그것을 위해 XSD을 정의하여 예를 들어) 클라이언트에 웹 서비스에서 반환 할 XML의 구조를 정의하고, 다음 XSD를 사용/델파이 webservice에서 그 XML 반환하는 XML 매핑.

이 작업을 얻으려면, 델파이는 TClientDataSet에서 XML 다시 매핑 할 수있는 XML Mapper tool 있습니다. This article - 오래되었지만 여전히 그 방법에 대한 좋은 예입니다. 이를 다루는 또 다른 훌륭한 정보원은 this series of book chapters입니다.

.NET 측에서 XML을 System.Data.DataSet에 매핑하려고합니다. 좋은 기사는 here입니다.

+1

많이 고마워요 ...이게 내 머리에 쓰는 방법이지만, 어떻게 해야할지 모르겠군요. 당신은 저에게 빛을 보여 줘요 !!! 다시 한 번 감사드립니다 ... – JosepMaria

+0

@JosepMaria는 "웹 서비스에서 웹 클라이언트로 이동해야하는 정보와이 정보가 새롭고 구체적인 질문으로 요청합니다.이 작업을 위해 XSD를 어떻게 디자인해야합니까?" 그런 다음 XML Mapper 설명서를 읽고 이에 대한 구체적인 질문을 시작하십시오. 마지막으로 XML을 System.Data.DataSet에 매핑하는 .NET 설명서를 읽고 그에 대한 특정 질문을하십시오. 당신이 시도한 것을 사람들에게 보여 주면, 그들은 당신을 시도하고 도울 것입니다. –

0

아래 표시된 XML은 내 델파이를 Webservice에서이를 생성해야

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

.NET

에서 만든 다른 웹 서비스의 응답이다. 데이터 집합에서 직접 본문을 생성하기 위해 델파이에 자동 방법 (구성 요소 또는 그와 유사한 것)이 있다면 제 질문이있었습니다.

이제 Jeroen Wiert Pluimwers가 말하는 정의 된 xsd에서 XML을 생성합니다. (고마워요)

관련 문제