进度从Web服务调用返回905(11773)错误

时间:2015-11-11 19:23:45

标签: web-services progress-4gl openedge

我在尝试发送网络服务电话时收到905(11773)错误。我认为它与Web服务有关,需要很长时间才能达到某种内部进度超时(我没有设置任何超时)。我之所以这样想,是因为我可以向同一个Web服务发送小请求,但它工作正常,但是大请求会返回上述错误。有任何想法吗?有这样的时间吗?

Error receiving Web Service Response:  (11773)

An error ocurred in the process of receiving a SOAP response message.  
The error details are appended.

但没有附加细节...

编辑: 在任何人问我之前我没有使用wait-for以及带来的所有事情。

进展版本:11.3

这是一个非常简单的连接和通话。只需连接到服务器,连接到端口,然后拨打电话。没有任何特殊代码。我已经将它条带化了测试。所以我不知道它是编码问题,我认为它是一个进度配置问题。

不确定它是如何帮助的,但是我的编辑了stackoverflow代码(注意这是在尝试异步之前,因为它有相同的结果):

define variable hWebService as handle    no-undo.         /* Handle to Web Service */
define variable hPricePort  as handle    no-undo.         /* Handle to Web Service Price Port */
define variable cConnection as character no-undo.         /* Web Service host / connection string */ 
define variable lcPrices as longchar no-undo.
define variable lcOutput as longchar no-undo.

create server hWebService.
hWebService:connect(cConnection) no-error.
if error-status:error or not hWebService:connected() then do:
  delete object hWebService.
  message errMsg("Error WebService:connect(" + cConnection + ")").
  return.
end.

run PriceWebServiceSoap set hPricePort on hWebService no-error.
if error-status:error then do:
  delete object hWebService.
  message errMsg("Error setting adding pricing port: ").
  return
end.  /* if error-status:error */

run createPricesXml(input-output lcPrices).

run ImportRetailPrices in hPricePort (input lcPrices, output lcOutput) no-error.
if error-status:error then
  message errMsg("Error making price call:"). /* FROM THIS CHECK I'M GETTING: Unexpected response status code: 905 (11773) */ 

if valid-handle(hPricePort) then
delete procedure hPricePort no-error.

/* Close "connection" to the Web Service */
if valid-handle(hWebService) then do:
  if hWebService:connected() then
    hWebService:disconnect() no-error.
  delete object hWebService no-error.
end.

1 个答案:

答案 0 :(得分:0)

如果确实是超时,处理它的好方法是使用异步连接。这样你很容易改变等待响应的时间。

我有从OpenEdge运行Web服务的丰富经验,我不认为我曾经(或者至少很少)看到过时。这可能与您调用的Web服务的稳定性有关。如果它确实是超时,它将始终在完全相同的时间之后发生。我不知道多长时间。在线帮助(在11.6中声明,对于纯套接字,超时是不存在的,会话将永远等待)。

异步请求始终是外部服务的好主意,因为您可以更好地处理奇怪的行为。

下面您将看到一个如何运行异步的简单示例。无法连接,断开连接和清理。

DEFINE VARIABLE phPort      AS HANDLE      NO-UNDO.
DEFINE VARIABLE hHandle     AS HANDLE      NO-UNDO.
DEFINE VARIABLE glcRequest  AS LONGCHAR   NO-UNDO.
DEFINE VARIABLE glcResponse AS LONGCHAR   NO-UNDO.
DEFINE VARIABLE glReply     AS LOGICAL     NO-UNDO.

DEFINE VARIABLE iTimeOut AS INTEGER     NO-UNDO INITIAL 60.


/* This procedure will run when a response is recieved */
PROCEDURE WebServiceReply:
    DEFINE INPUT  PARAMETER pcRequest  AS LONGCHAR   NO-UNDO.
    DEFINE OUTPUT PARAMETER pcResponse AS LONGCHAR   NO-UNDO.
    glReply = TRUE.

    /* This is where the response should be handled */
END.

/* 
Connect left out 
*/
RUN WebService IN phPort ASYNCHRONOUS SET hHandle
    EVENT-PROCEDURE "WebServiceReply" 
    ( INPUT  glcRequest
    , OUTPUT glcResponse ) .

WAIT-FOR PROCEDURE-COMPLETE OF hHandle PAUSE iTimeOut.

IF glReply = FALSE THEN  DO:

    MESSAGE "No response recieved" VIEW-AS ALERT-BOX ERROR.

    hHandle:SERVER:CANCEL-REQUESTS().
    PROCESS EVENTS.

END.

网络服务的常规故障排除

当遇到Web Service调用问题时,我发现使用记录所有请求和响应的代理很容易。有几个可用,但为什么不尝试一个由Progress Telerik Fiddler拥有的。

您需要下载并安装Telerik First。

在Progress启动时,添加两个参数:

-proxyhost localhost -proxyport 8888  

8888是Telerik默认代理端口。如果你愿意,可以改变它,但是在Fiddler中也可以改变它。在本地计算机上运行代理 - 这将是最简单的。

现在,如果再次启动Progress会话,将通过代理调用所有Web服务,Fiddler将记录所有进出的数据。也许你可以发现一些奇怪的东西?

如果其他所有方法都失败

如果您使用的是活动许可证,则始终可以使用“进度”记录请求案例。