Description
Repro: HttpClientBug.zip
using System;
using System.Net.Http;
using System.Threading.Tasks;
internal static class Program
{
private static async Task Main()
{
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
TaskScheduler.UnobservedTaskException += OnUnobservedTaskException;
using (var httpClient = new HttpClient())
{
try
{
await httpClient.GetAsync("https://translate.google.com").ConfigureAwait(false);
Console.WriteLine("OK");
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
private static void OnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
Console.WriteLine(e.Exception);
}
private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine(e.ExceptionObject);
}
}
I reproduced this one on Linux and I didn't have much luck on Windows.
Run repro with dotnet run
. After a default timeout of around 60 seconds, you'll get:
$ dotnet run
System.OperationCanceledException: The operation was canceled.
at System.Net.Http.HttpClient.HandleFinishSendAsyncError(Exception e, CancellationTokenSource cts)
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at HttpClientBug.Program.Main() in /tmp/httpclientbug/Program.cs:line 17
Doing the same by forcing older curl handler:
$ DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0 dotnet run
OK
Please note that this issue is specific and not reproducible with just any https
server, as majority of them work just fine. I encountered this issue when accessing https://translate.google.com
, which is what I used in my repro above.
I reproduced this bug on latest master
as well as .NET Core 2.1 rc1.
This bug could be some sort of regression because previously my app running master
SDK worked just fine with this URL, including SocketHttpHandler
that I used for a longer while. It could also be regression caused by Google's servers configuration change that triggered bug existing in the code since quite some time, which is more likely. Of course this one is not reproducible on .NET Core 2.0, since there is no SocketHttpHandler
there.
Thank you in advance for looking into this.
.NET Core SDK (reflecting any global.json):
Version: 2.2.100-preview1-008636
Commit: 6c9942bae6
Runtime Environment:
OS Name: debian
OS Version:
OS Platform: Linux
RID: debian-x64
Base Path: /opt/dotnet/sdk/2.2.100-preview1-008636/
Host (useful for support):
Version: 2.1.0-preview3-26411-06
Commit: 8faa8fcfcf
.NET Core SDKs installed:
2.2.100-preview1-008636 [/opt/dotnet/sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.0-preview2-30475 [/opt/dotnet/shared/Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.0-preview2-30475 [/opt/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.0-preview3-26411-06 [/opt/dotnet/shared/Microsoft.NETCore.App]
[EDIT] Inline C# source code by @karelz