Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Botframework 连接ETIMEDOUT 137.116.128.188:443,用于bot框架,可以扩展_Botframework - Fatal编程技术网

Botframework 连接ETIMEDOUT 137.116.128.188:443,用于bot框架,可以扩展

Botframework 连接ETIMEDOUT 137.116.128.188:443,用于bot框架,可以扩展,botframework,Botframework,因此,我有一个请求,它将运行至少1分钟,然后才会给出响应 为了帮助用户在我的请求仍在运行时不执行任何操作,我设置了一些sendTyping活动: 用于审查生产代码工作敏感信息 ,我的代码通常是这样的: var queryDone = "No"; var xmlData = ''; let soappy = soapQuery("123", "456", "789",&q

因此,我有一个请求,它将运行至少1分钟,然后才会给出响应

为了帮助用户在我的请求仍在运行时不执行任何操作,我设置了一些sendTyping活动:

用于审查生产代码工作敏感信息 ,我的代码通常是这样的:

        var queryDone = "No";
        var xmlData = '';
        let soappy = soapQuery("123", "456", "789","getInfo");

        soappy.then(function (res) {
            queryDone = 'Yes';
            xmlData = res;
            console.log(xmlData);
        }, function (err) {
            queryDone = 'Timeout';
        })

        while (queryDone == 'No') {
            await step.context.sendActivity({ type: 'typing' });
        }
其中
soapQuery()
是一个函数,用于发送和返回POST请求,如下所示:

return new Promise(function (resolve, reject) {
        request.post(options, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                resolve(body);
            }
            else {
                reject(error);
            }
        })
    })
问题的出现是因为这1分钟的响应(由于大量数据和我的请求的验证,服务器至少需要1分钟来处理它,所以这不是真正可以协商的)

虽然1分钟后,控制台会打印响应,但遗憾的是,在此之前,机器人已经超时。

有没有建议如何解决这个问题,或者延长bot的运行时间

我需要sendtyping活动,以便用户了解请求尚未完成。再一次,我的请求需要1分钟才能得到响应


谢谢大家!

因此,出现这种情况的原因是HTTP请求在Bot框架中的工作方式与您预期的稍有不同:

因此,基本上,在您的场景中发生的是:

  • 用户发送HTTP POST
  • Bot调用您的
    soapQuery
  • Bot开始发送键入指示器
  • soapQuery
    完成
  • 在请求已经超时(15秒后)之后,Bot最终从步骤1向HTTP POST发送HTTP响应
  • 要解决这个问题,我会:

  • 用于连续自动发送键入指示器,直到bot发送另一条消息为止(这将消除您的阻塞
    while
    循环)
  • 一旦
    soapQuery
    完成,bot将丢失对话的上下文,因此您的
    soappy.then()
    函数将需要发送一条消息。为此,您需要,然后在
    then()
    函数中,您需要
  • 但是,请注意,我上面链接的示例中的bot在接收到
    api/notify
    端点上的请求后调用主动消息。你的不需要这么做。它只需要使用类似的代码发送主动消息