0

我在这里询问了使用 RPG 的 WCF 服务并收到以下回复:Scott Klement 有一个演示文稿和示例:http ://www.scottklement.com/presentations/#HTTPAPI

我使用 SoapUI 来测试我的服务,并让他的 soap 语句与 HTTAPI 一起使用。该服务在 SoapUI 中返回数据,但我在 RPG 程序中使用它没有成功。SoapUI 返回以下内容,但它似乎只适用于 SoapUI - 它也不包括我的服务的路径,即

http://ServerName/COE/CustByNameList.svc 

如果我导航到http://ServerName/COE/CustByNameList.svc?wdsl,我会得到 wsdl。

SoapUI 中返回的语句:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:GetCustomerData>
         <!--Optional:-->
         <tem:CustomerNumber>1688</tem:CustomerNumber>
      </tem:GetCustomerData>
   </soapenv:Body>
</soapenv:Envelope>

结果如下所示:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetCustomerDataResponse xmlns="http://tempuri.org/"><GetCustomerDataResult xmlns:a="http://schemas.datacontract.org/2004/07/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:List xmlns:b="http://schemas.datacontract.org/2004/07/WebOrderEntry.Lists"><b:PartialCSTMS><b:ADR19A>3910 LAKEFIELD DR             </b:ADR19A><b:ADR29A>JOHNS CREEK FACILITY          </b:ADR29A><b:CITY9A>SUWANEE                  </b:CITY9A><b:CST_x0023_9A>1688</b:CST_x0023_9A><b:NAME9A>JOHNSON CONTROLS              </b:NAME9A><b:PHON9A>770-495-9950        </b:PHON9A><b:STAT9A>GA</b:STAT9A><b:ZIPC9A>30024     </b:ZIPC9A></b:PartialCSTMS></a:List></GetCustomerDataResult></GetCustomerDataResponse></s:Body></s:Envelope>

我不断收到 500 个内部服务器错误。根据我看到的示例,我尝试了许多 SOAP 语句的变体,但它们可以追溯到 2008 年。有没有人成功地从 RPG 调用 WCF 服务?

4

3 回答 3

0

我询问了我的 Twitter 网络,@alexeivbaranov回复了以下内容:

尝试使用 TcpMon 比较来自 SoapUI 和 RPG 客户端的请求和响应。据我了解,您的 SoapUI req 工作正常,但 RPG req 得到 500,因此请求出现问题。比较它们。

于 2012-07-10T14:18:05.147 回答
0

检查你的标题。你可能错过了肥皂动作。下面是使用启用了安全性的 WsHttp 绑定公开的对 WCF 服务的请求示例。wsa:行动是你可能需要的东西。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<soapenv:Envelope
    xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
    xmlns:ns="http://somenamespace">
    <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
        <wsa:Action>http://someuri/Get</wsa:Action>
        <wsa:To>http://localhost/someapp/SomeService.svc</wsa:To>
    </soapenv:Header>
    <soapenv:Body>
        <ns:GetRequest>
            <ns:Body>
                <ns:Id>12345</ns:Id>
            </ns:Body>
        </ns:GetRequest>
    </soapenv:Body>
</soapenv:Envelope>
于 2012-07-10T16:16:20.773 回答
0

我不得不放弃使用 HTTPAPI 来使用我的 WCF Web 服务——只是无法通过 HTTP 400 和 500 错误。记录没有帮助。我相信我终于设法让 SOAP 调用正确,但随后开始收到似乎转化为特殊字符问题的错误。

相反,我最终使用了 IBM 的 IWS 并让它工作。这两个链接很有帮助:

http://www.ibm.com/developerworks/ibmi/library/i-amrawsdl2rpg/index.html

http://www.iprodeveloper.com/article/rpg-programming/consume-web-services-with-ibms-iws-66209

于 2012-07-18T11:34:39.417 回答