KOD cpp: UKRYJ
HttpWebRequest^ request = dynamic_cast<HttpWebRequest^>(WebRequest::Create(url));
// ... poustawianych kilka właściwości...
request->AllowWriteStreamBuffering = true;
Upload^ up = gcnew Upload(request->GetRequestStream());
up->Start();
HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse());
// ... poustawianych kilka właściwości...
request->AllowWriteStreamBuffering = true;
Upload^ up = gcnew Upload(request->GetRequestStream());
up->Start();
HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse());
gdzie klasa Upload to ...
KOD cpp: UKRYJ
Void Upload::Start()
{
// data - strumień zawierający dane do wysyłki
// write_stream = request->GetRequestStream();
int bytes = 0;
array<unsigned char>^ buffer = gcnew array<unsigned char>(8192);
while ((bytes = data->Read(buffer, 0, buffer->Length)) > 0)
{
write_stream->Write(buffer, 0, bytes);
this->upd_->Invoke(data->Position);
}
write_stream->Close();
MessageBox::Show("Completed");
};
{
// data - strumień zawierający dane do wysyłki
// write_stream = request->GetRequestStream();
int bytes = 0;
array<unsigned char>^ buffer = gcnew array<unsigned char>(8192);
while ((bytes = data->Read(buffer, 0, buffer->Length)) > 0)
{
write_stream->Write(buffer, 0, bytes);
this->upd_->Invoke(data->Position);
}
write_stream->Close();
MessageBox::Show("Completed");
};
Problem jest z momentem zapisu danych do strumienia. Jak sądziłem zapis do strumienia nie będzie się zbytnio różnił od odczytu, jednak się pomyliłem. Dane wysyłane są w momencie wywołania
KOD cpp: UKRYJ
HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse());
Z tego co mi wiadomo, jednym z możliwych rozwiązań jest użycie BeginWrite i EndWrite, jednak to jest równoznaczne z tworzeniem kodu wykonujące się asynchronicznie, a nie na tym mi aktualnie zależy (na końcu dam całą funkcję wysyłającą na wątek - o ile to się sprawdzi, bo już mam co do tego wątpliwości). Na msdn pisało też, że aby od razu zapisywać do strumienia należy ustawić właściwość "AllowWriteStreamBuffering" na false, ustawiłem - zero efektu.
Jak to zrobić ? Jak zmusić ten kod by wysyłał dane od razu, a nie gromadził w kolejnym buforze (to ma coś wspólnego z sendChunked ?)