2014-08-28 36 views
1

所以我的同事已经编写了一个简单的web服务progress4GL,期望从我作为输入参数 - >数据集并返回给我一个数据集。这里是Web服务如何将进度4GL数据集输出参数转换为.net类型时消耗进度4Gl网络服务

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中,当我使用的Web服务.NET期望通过XmlElement的类型为progress4gl输入 - 输出数据集参数

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

但昨天,当我的同事上传服务器上的Web服务时 - 当我对Web服务进行新的Web引用时 - 突然输出这个输出 - 输入数据集参数.net表示它期望beaHost.ds11TTList d s11类型。 (这里beaHost是对webService的引用的名称)。

有人可以帮助我ehat可能是问题

!UPDATE

下面是从服务器的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> 

这里从本地的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对于Web服务,我们可以看到它吗? – 2014-08-28 14:08:32

+0

嗨我已经从wsdl公布了一个片段与差异 – 2014-08-29 06:59:19

回答

0

如果你没有它,请下载Soa pUI从这里:http://sourceforge.net/projects/soapui/files/

在SoapUI中,设置一个项目来调用你的web服务,看看它返回什么 - 我的猜测是给予prodataset和/或发送到客户端的临时表的名称doesn不符合你的.Net客户端所期待的,这就是错误的来源。

如果是这种情况,请使用SERIALIZE-NAME属性来获取要在webservice和客户端之间对齐的名称。

我的猜测是,它是不符合TT的名字,所以你可以这样做:

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

如果它的数据集,那么这样做:

DATASET ds:SERIALIZE-NAME = "CorrectDsName". 
+0

嗨,谢谢你 - 你可以从wsdl快速查看它返回服务器和本地主机 – 2014-08-29 07:00:01

+0

我没有看到任何引用beaHost.ds11TTList ds11在这些WSDL的,所以我不能在这里帮忙。您需要先找出代码中的名称,然后才能找出Web服务与.Net客户之间存在不匹配的原因。 – 2014-08-29 14:38:34