在创建任何HttpWebRequest之前调整httprequest超时时间



在c# 5和winform中,我使用了Telegram公司创建的库。在这个库中有一个函数SendDocument(UserId,DocumentStream)。我知道在这个函数中,他们用了一些HttpWebRequest,但没有处理它的Timeout性质。因为有时它不能发送大文档,并且在精确的100秒(DotNet中的默认超时)之后,该函数抛出异常The task was canceled

从电报公司的文档中,我们可以发送50mb的文件,我的示例文件大约是15mb。

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

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

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

我的建议是,不要费心调整超时。它不太可能起作用。以下是我的经历:

我尝试使用Telegram Bot API上传一个20M mp4视频文件。对于树莓派来说,耗时5分钟,然后返回504 Gateway-Timeout错误。从托管服务器,它花了1分钟,然后返回一个504网关超时错误。然而,在这两种情况下,视频最终都在5分钟后到达了接收者手中。所以,上传似乎有点成功,但不是很成功。

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

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

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

我怀疑问题出在电报服务器上,所以我联系了Bot支持。他们有一次回复我,说他们已经做了一些改进,并问我是否还有同样的问题。但同样的问题仍然存在。

所以,问题似乎出在电报服务器上。这不是你的代码

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

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

希望对大家有所帮助

最新更新