C# HttpClient сломал трубу, но завиток работает - PullRequest
2 голосов
/ 11 апреля 2020

У меня есть команда curl, которая работает должным образом.

curl \
    -H "Authorization: token some-token" \
    -H "Content-Type: video/mp4" \
    --data-binary some-video.mp4 \
    "https://somewhere.com/upload-handler"

Вот то, что, как я полагаю, находится в эквиваленте. NET Core's HttpClient.

using (var stream = File.OpenRead("some-video.mp4"))
using (var httpClient = new HttpClient())
{
    httpClient.DefaultRequestHeaders.Add("Authorization", "token some-token");

    var streamContent = new StreamContent(stream);
    streamContent.Headers.ContentType = new MediaTypeHeaderValue("video/mp4");

    var message = await httpClient.PostAsync(
        $"https://somewhere.com/upload-handler",
        streamContent);
    message.EnsureSuccessStatusCode();
}

Однако, при запуске примера. NET я получаю это.

Unhandled exception: System.Net.Http.HttpRequestException: Error while copying content to a stream.
 ---> System.IO.IOException: Unable to read data from the transport connection: Broken pipe.
 ---> System.Net.Sockets.SocketException (32): Broken pipe
   --- End of inner exception stack trace ---
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
   at System.Net.Security.SslStream.<WriteSingleChunk>g__CompleteAsync|210_1[TWriteAdapter](ValueTask writeTask, Byte[] bufferToReturn)
   at System.Net.Security.SslStream.WriteAsyncChunked[TWriteAdapter](TWriteAdapter writeAdapter, ReadOnlyMemory`1 buffer)
   at System.Net.Security.SslStream.WriteAsyncInternal[TWriteAdapter](TWriteAdapter writeAdapter, ReadOnlyMemory`1 buffer)
   at System.Net.Http.HttpConnection.WriteAsync(ReadOnlyMemory`1 source)
   at System.IO.Stream.CopyToAsyncInternal(Stream destination, Int32 bufferSize, CancellationToken cancellationToken)
   at System.Net.Http.HttpContent.CopyToAsyncCore(ValueTask copyTask)
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpContent.CopyToAsyncCore(ValueTask copyTask)
   at System.Net.Http.HttpConnection.SendRequestContentAsync(HttpRequestMessage request, HttpContentWriteStream stream, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)

Я работаю. NET Core 3.1, Ubuntu 18.04.

В случае, если это имеет значение, я при попытке загрузить двоичный файл в выпуск GitHub через API: https://developer.github.com/v3/repos/releases/#upload -a-release-asset

edit : я отправил код HttpClient через Чарльз, чтобы увидеть, что происходит, и тогда это работает ... :( Так что я не могу сказать, что не так. Круто.

1 Ответ

0 голосов
/ 10 мая 2020

Я получаю аналогичную ошибку при попытке отправить пакет nuget sh в реестр пакетов GitHub с помощью команды dotnet nuget push из агента сборки ubuntu в AWS Code Build. Я пу sh несколько пакетов nuget, и эта ошибка только время от времени (90% времени) возникает на самом большом (~ 5 МБ).

error: Error while copying content to a stream.
error:   Unable to read data from the transport connection: Broken pipe.
error:   Broken pipe

Я использую do tnet sdk 2.2.

Я не смог найти нигде полезной информации об этой ошибке, но эта статья дала мне пищу для размышлений https://support.sonatype.com/hc/en-us/articles/360000228868-Artifact-uploads-fail-with-broken-pipe-errors

...