我在尝试发送网络服务电话时收到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.
答案 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将记录所有进出的数据。也许你可以发现一些奇怪的东西?
如果其他所有方法都失败
如果您使用的是活动许可证,则始终可以使用“进度”记录请求案例。