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



我在尝试发送web服务调用时遇到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.

如果它确实是一个超时,那么处理它的一个好方法就是使用异步连接。这样你就很容易改变你等待回复的时间。

我在运行OpenEdge的Web服务方面有着丰富的经验,我想我从来没有(或者至少很少)看到过超时。不过,这可能与您所调用的Web服务的稳定性有关。如果它确实是一个超时,那么它总是在完全相同的时间之后发生。我不知道这段时间有多长。在线帮助(11.6中指出,对于纯套接字,超时不存在,会话将永远等待)。

异步请求对于外部服务来说总是一个好主意,因为您可以更好地处理奇怪的行为。

下面您将看到一个关于如何运行async的简单示例。省略了连接、断开和清理。

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服务的一般故障排除

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

您需要先下载并安装Telerik。

在您的Progress启动中,您添加了两个参数:

-proxyhost localhost -proxyport 8888  

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

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

如果其他所有操作都失败

如果您使用的是活动许可证,您可以随时使用Progress记录请求案例。

相关内容

  • 没有找到相关文章

最新更新