HttpWebRequest chunked / POS assíncrono

Oi, eu quero fazer upload de algum conteúdo gerado dinamicamente para a minha API da web. No cliente eu uso o HttpWebRequest. Os dados devem ser carregados com sincronização e eu quero gravar no fluxo APÓS (!) Eu executei a solicitação HTTP.

(De servidor para cliente, ele funciona bem, mas de cliente para servidor eu recebo algumas exceções).

A implementação do cliente se parece com:

HttpWebRequest httpWebRequest = HttpWebRequest.Create(myUrl) as HttpWebRequest;
httpWebRequest.Method = "POST";
httpWebRequest.Headers["Authorization"] = "Basic " + ... ;
httpWebRequest.PreAuthenticate = true;

httpWebRequest.SendChunked = true;
//httpWebRequest.AllowWriteStreamBuffering = false; //does not help...
httpWebRequest.ContentType = "application/octet-stream";
Stream st = httpWebRequest.GetRequestStream();

Task<WebResponse> response = httpWebRequest.GetResponseAsync();

// NOW: Write after GetResponse()

var b = Encoding.UTF8.GetBytes("Test1");
st.Write(b, 0, b.Length);

b = Encoding.UTF8.GetBytes("Test2");
st.Write(b, 0, b.Length);

b = Encoding.UTF8.GetBytes("Test3");
st.Write(b, 0, b.Length);

st.Close();

var x = response.Result;
Stream resultStream = x.GetResponseStream();
//do some output...

Recebo exceções (NotSupportedException: o fluxo não suporta operações de leitura ou gravação de E / S simultâneas.) Em stream.write ().

Por que eu chego aqui a exceções. Algumas vezes as primeiras gravações worke e as gravações tardias lançam a exceção. No início, a propriedade stream.CanWrite é verdadeira, mas após a primeira ou a segunda ou terceira gravação, ela se torna falsa ... E a exceção é lançada na próxima gravação.

Editar: Alterar AllowWriteStreamBuffering não ajudou

Apêndice: Eu encontrei o meu problema. Esse problema é causado pela ordem do meu código. Eu tenho que chamá-lo nesta ordem:

GetRequestStream (gravando assíncrono no fluxo) (a solicitação é enviada ao servidor após a primeira gravação) e:GetResponseAsync ()GetResponseStream ()

Eu pensei que "GetResponseAsync" aciona o cliente para enviar a solicitação (por enquanto apenas os cabeçalhos). Mas isso não é necessário porque a solicitação já foi enviada depois que eu escrevi os primeiros bits no fluxo.

Segunda causa dos meus problemas: Violinista. No momento, o Fiddler suporta apenas o fluxo de respostas e não solicitações.

questionAnswers(2)

yourAnswerToTheQuestion