как преобразовать выходной параметр набора данных progress4GL в тип .net при использовании веб-службы progress4Gl

1

Итак, мой коллега написал простой веб-сервис в progress4GL, который ожидает от меня как входного параметра → набор данных и возвращает мне набор данных. вот веб-сервис

Define TEMP-TABLE TTList NO-UNDO
       FIELD  CtrlName          AS CHAR
       FIELD  WrdNr             AS INT
       FIELD  Descr             AS CHAR
       FIELD  DescrShort        AS CHAR
       FIELD  DescrTooltip      AS CHAR

       FIELD TRecid             AS INT
       .

DEFINE DATASET ds FOR TTList.

DEFINE INPUT        PARAMETER pCoCd                         AS CHARACTER   NO-UNDO.
DEFINE INPUT        PARAMETER pLanCd                        AS CHARACTER   NO-UNDO.
DEFINE INPUT        PARAMETER pUsrCd                        AS CHARACTER   NO-UNDO.
DEFINE INPUT        PARAMETER pFilter                       AS CHARACTER   NO-UNDO.
DEFINE INPUT-OUTPUT PARAMETER DATASET                       FOR ds.
DEFINE       OUTPUT PARAMETER pErrorTxt                     AS CHARACTER   NO-UNDO.

И в.net, когда я использую веб-службу.net, я хочу передать тип XmlElement для параметра progress4gl input-output dataset

 XmlElement docresult = doc.DocumentElement;
             beaHostDB.TranslateList(pCoCd, languageID, " ", " ", ref  docresult, out pErrorTxt);

Но вчера, когда мой коллега выложил веб-сервис на сервере, - и когда я сделал новую веб-ссылку на веб-службу - сударственно для этого вывода, параметр входного набора данных.net говорит, что он ожидает тип beaHost.ds11TTList ds11. (здесь beaHost - это имя ссылки на webService).

Может кто-то помочь мне, что может быть проблемой?

!!ОБНОВИТЬ

Вот wsdl с сервера (я предоставил только фрагменты с отличиями)

    schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:BeaWeb:BeaWeb">
    <element name="ds">
    <complexType>
    <sequence>
    <element maxOccurs="unbounded" minOccurs="0" name="TTArticle">
    <complexType>
    <sequence>
    <element name="ArtCd" nillable="true" type="xsd:string"/>
    <element name="Descr" nillable="true" type="xsd:string"/>
    <element name="Photo" nillable="true" prodata:dataType="prodata:blob" type="xsd:base64Binary"/>
    <element name="Price" nillable="true" type="xsd:decimal"/>
    <element name="CurrCd" nillable="true" type="xsd:string"/>
    <element name="AvStockQty" nillable="true" type="xsd:decimal"/>
    <element name="TRecid" nillable="true" type="xsd:int"/>
    </sequence>
    </complexType>
    </element>
    </sequence>
    </complexType>
    </element>
    <element name="ds2">
    <complexType>
    <sequence>
    <element maxOccurs="unbounded" minOccurs="0" name="TTArticleGroup">
    <complexType>
    <sequence>
    <element name="ArticleGroupLinkSeqNr" nillable="true" type="xsd:int"/>
    <element name="ParentArticleGroupLinkSeqNr" nillable="true" type="xsd:int"/>
    <element name="PreParentArticleGroupLinkSeqNr" nillable="true" type="xsd:int"/>
    <element name="SeqNr" nillable="true" type="xsd:int"/>
    <element name="ArtGroupCd" nillable="true" type="xsd:string"/>
    <element name="Descr" nillable="true" type="xsd:string"/>
    <element name="Photo" nillable="true" prodata:dataType="prodata:blob" type="xsd:base64Binary"/>
    <element name="AltText" nillable="true" type="xsd:string"/>
    <element name="PgName" nillable="true" type="xsd:string"/>
    <element name="TRecid" nillable="true" type="xsd:int"/>
    </sequence>
    </complexType>
    </element>
    </sequence>
    </complexType>
    </element>
---
<element name="GetArticle">
<complexType>
<sequence>
<element name="pCoCd" nillable="true" type="xsd:string"/>
<element name="pLanCd" nillable="true" type="xsd:string"/>
<element name="pUsrCd" nillable="true" type="xsd:string"/>
<element name="pFilter" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="GetArticleResponse">
<complexType>
<sequence>
<element name="result" nillable="true" type="xsd:string"/>
<element ref="S2:ds"/>
<element name="pErrorTxt" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="GetArticleGroup">
<complexType>
<sequence>
<element name="pCoCd" nillable="true" type="xsd:string"/>
<element name="pLanCd" nillable="true" type="xsd:string"/>
<element name="pUsrCd" nillable="true" type="xsd:string"/>
<element name="pFilter" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="GetArticleGroupResponse">
<complexType>
<sequence>
<element name="result" nillable="true" type="xsd:string"/>
<element ref="S2:ds2"/>
<element name="pErrorTxt" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</element>

Вот от Localhost файл wsdl

complexType name="dsChanges" prodata:datasetName="ds" prodata:isDsChanges="true" prodata:namespace="urn:beawebprogress:BeaWebProgress">
<sequence>
<any/>
</sequence>
</complexType>
<element name="ds">
<complexType>
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="TTArticle">
<complexType>
<sequence>
<element name="ArtCd" nillable="true" type="xsd:string"/>
<element name="Descr" nillable="true" type="xsd:string"/>
<element name="Photo" nillable="true" prodata:dataType="prodata:blob" type="xsd:base64Binary"/>
<element name="Price" nillable="true" type="xsd:decimal"/>
<element name="CurrCd" nillable="true" type="xsd:string"/>
<element name="AvStockQty" nillable="true" type="xsd:decimal"/>
<element name="TRecid" nillable="true" type="xsd:int"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
<complexType name="ds2Changes" prodata:datasetName="ds2" prodata:isDsChanges="true" prodata:namespace="urn:beawebprogress:BeaWebProgress">
<sequence>
<any/>
</sequence>
</complexType>
<element name="ds2">
<complexType>
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="TTArticleGroup">
<complexType>
<sequence>
<element name="ArticleGroupLinkSeqNr" nillable="true" type="xsd:int"/>
<element name="ParentArticleGroupLinkSeqNr" nillable="true" type="xsd:int"/>
<element name="PreParentArticleGroupLinkSeqNr" nillable="true" type="xsd:int"/>
<element name="SeqNr" nillable="true" type="xsd:int"/>
<element name="ArtGroupCd" nillable="true" type="xsd:string"/>
<element name="Descr" nillable="true" type="xsd:string"/>
<element name="Photo" nillable="true" prodata:dataType="prodata:blob" type="xsd:base64Binary"/>
<element name="AltText" nillable="true" type="xsd:string"/>
<element name="PgName" nillable="true" type="xsd:string"/>
<element name="TRecid" nillable="true" type="xsd:int"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
-------------------
<element name="GetArticle">
<complexType>
<sequence>
<element name="pCoCd" nillable="true" type="xsd:string"/>
<element name="pLanCd" nillable="true" type="xsd:string"/>
<element name="pUsrCd" nillable="true" type="xsd:string"/>
<element name="pFilter" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="GetArticleResponse">
<complexType>
<sequence>
<element name="result" nillable="true" type="xsd:string"/>
<element name="ds" type="S2:dsChanges"/>
<element name="pErrorTxt" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="GetArticleGroup">
<complexType>
<sequence>
<element name="pCoCd" nillable="true" type="xsd:string"/>
<element name="pLanCd" nillable="true" type="xsd:string"/>
<element name="pUsrCd" nillable="true" type="xsd:string"/>
<element name="pFilter" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="GetArticleGroupResponse">
<complexType>
<sequence>
<element name="result" nillable="true" type="xsd:string"/>
<element name="ds2" type="S2:ds2Changes"/>
<element name="pErrorTxt" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</element>
  • 0
    Есть ли WSDL для веб-службы, мы можем это увидеть?
  • 0
    Привет, я опубликовал фрагмент из WSDL с различиями
Теги:
openedge
progress-4gl

1 ответ

0

Если у вас его нет, загрузите SoapUI отсюда: http://sourceforge.net/projects/soapui/files/

В SoapUI настройте проект для вызова своего веб-сервиса и посмотрите, что он возвращает - я предполагаю, что имя, предоставленное prodataset и/или temp-table, которое отправляется клиенту, не соответствует тому, что ваш.Net-клиент ожидая, и что там, где возникает ошибка.

Если это так, используйте атрибут SERIALIZE-NAME, чтобы совместить имена между веб-сервисом и клиентом.

Я думаю, это имя TT, которое не соответствует, поэтому вы бы сделали это:

TEMP-TABLE ttlist:SERIALIZE-NAME = "ds11TTList".

Если это набор данных, сделайте следующее:

DATASET ds:SERIALIZE-NAME = "CorrectDsName".
  • 0
    Привет, спасибо. Можете ли вы быстро взглянуть на wsdl, чтобы вернуть сервер и локальный хост?
  • 0
    Я не вижу ничего, что ссылается на beaHost.ds11TTList ds11 в этих WSDL, поэтому я не могу здесь помочь. Вам нужно выяснить, где эти имена находятся в вашем коде, прежде чем вы сможете понять, почему существует несоответствие между веб-сервисом и потребителем .Net.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню