0

在 C# 5 和 winform 中,我使用了 Telegram 公司创建的库。在这个库中有一个函数SendDocument(UserId,DocumentStream)。我知道在这个函数中,他们使用了 some HttpWebRequest,并且它的Timeout属性没有被处理。因为有时它无法发送大型文档,并且在 100 秒后(DotNet 中的默认超时),该函数会引发异常The task was canceled

从 Telegram 公司的文档中,我们可以发送 50 MB 的文件,而我的示例文件大约是 15 MB。

好的,现在我想调整HttpWebRequest我所有服务器的超时时间,但我没有任何功能。

我可以调整HttpWebRequest.Timeout服务器中的所有属性吗?

4

2 回答 2

2

这与您的问题没有直接关系,但可能有助于您放松心情。

我的建议是,不要费心调整 timeout。这不太可能有帮助。这是我所经历的:

我尝试使用 Telegram Bot API 上传 20M 的 mp4 视频文件。在 Raspberry Pi 中,它需要 5 分钟,然后返回 504 Gateway-Timeout 错误。从托管服务器,它需要 1 分钟,然后返回 504 Gateway-Timeout 错误。然而,在这两种情况下,视频最终都在 5 分钟后到达了收件人手中。因此,上传似乎有些成功,但并不十分成功。

我试图通过流式上传来解决问题。同样的问题仍然存在。

我试图调整 HTTP 超时参数。同样的问题仍然存在。

我尝试使用 cURL 发出请求(而不是使用我编写的 Python 库telepot)。同样的问题仍然存在。

我怀疑问题出在 Telegram 服务器上,所以我与 Bot Support 进行了交谈。他们有一次回复我,说他们已经做了一些改进,并问我是否还有同样的问题。但同样的问题仍然存在。

因此,似乎问题出在 Telegram 服务器上。这不是你的代码。

于 2015-10-19T12:58:41.767 回答
1

我知道这是一个很老的问题,但我的回答可能会对某人有所帮助。当我试图通过我的机器人发送相当大的文件时,我收到了Telegram.Bot.Exceptions.ApiRequestException: Request timed out,我发现的唯一解决方案就是这个问题。这并不是很有帮助,因为如果您检查源代码,那么您会看到传递取消令牌对请求超时没有任何作用。但后来我看到您可以将 HttpClient 传递给您的机器人客户端实例并使其如下所示:

        _httpClient = new HttpClient();
        _httpClient.Timeout = new TimeSpan(0, 5, 0); // 5 min
        _client = new TelegramBotClient(botConfig.Token, _httpClient);

希望这会有所帮助

于 2019-01-14T07:02:01.927 回答