C# 使用progress4GL web服务时如何将progress4GL数据集输出参数转换为.net类型
因此,我的同事用progress4GL编写了一个简单的web服务,希望我将其作为输入参数->数据集并返回一个数据集。这是web服务C# 使用progress4GL web服务时如何将progress4GL数据集输出参数转换为.net类型,c#,.net,progress-4gl,openedge,C#,.net,Progress 4gl,Openedge,因此,我的同事用progress4GL编写了一个简单的web服务,希望我将其作为输入参数->数据集并返回一个数据集。这是web服务 Define TEMP-TABLE TTList NO-UNDO FIELD CtrlName AS CHAR FIELD WrdNr AS INT FIELD Descr AS CHAR FIELD DescrShort
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希望传递progress4gl输入输出数据集参数的XmlElement类型
XmlElement docresult = doc.DocumentElement;
beaHostDB.TranslateList(pCoCd, languageID, " ", " ", ref docresult, out pErrorTxt);
但是昨天,当我的同事将web服务上传到服务器上时——当我对web服务进行新的web引用时——突然针对这个输出-输入数据集参数.net说它需要beaHost.ds11TTList ds11类型。(这里beaHost是对Web服务的引用的名称)
有人能帮帮我吗?也许有问题
!!更新
这是来自服务器的wsdl(我只提供了一些有区别的片段)
schema xmlns=”http://www.w3.org/2001/XMLSchema“elementFormDefault=“qualified”targetNamespace=“urn:BeaWeb:BeaWeb”>
---
下面是来自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>
complexType name=“dsChanges”prodata:datasetName=“ds”prodata:isDsChanges=“true”prodata:namespace=“urn:beawebprogress:beawebprogress”>
-------------------
如果您没有,请从此处下载SoapUI:
在SoapUI中,设置一个项目来调用您的Web服务并查看它返回的内容-我猜发送给客户端的prodataset和/或temp表的名称与您的.Net客户端所期望的不匹配,这就是错误的来源
如果是这种情况,请使用SERIALIZE-NAME属性获取要在Web服务和客户端之间对齐的名称
我猜是TT名称不匹配,所以你应该这样做:
TEMP-TABLE ttlist:SERIALIZE-NAME = "ds11TTList".
DATASET ds:SERIALIZE-NAME = "CorrectDsName".
如果是数据集,则执行以下操作:
TEMP-TABLE ttlist:SERIALIZE-NAME = "ds11TTList".
DATASET ds:SERIALIZE-NAME = "CorrectDsName".
是否有web服务的WSDL,我们可以看到吗?嗨,我已经发布了WSDL中的一个片段,具有不同之处。嗨,谢谢-您可以从WSDL中快速查看一下,返回服务器和本地主机。我没有看到任何引用这些WSDL中的beaHost.ds11TTList ds11的内容,因此我在这里无法提供帮助。您需要找到这些名称在代码中的位置,然后才能找出Web服务和.Net使用者之间不匹配的原因。