А теперь про индуизм, то есть дотнет.
Второй день занимаюсь тем, что ребе
theiced называет "ежики, кактус".
Дано: есть RESTful веб-сервис на дотнете, состоит из нескольких HttpHandler-ов (ну это в дотнете сервлеты так называются). И один из этих хендлеров служил для закачки файлов. Файлов немелкого размера, до 100-200 мб.
Есть клиент (либа для работы с сервером и использующая ее прогу), который эти файлы должен закачивать.
Данные посылаются в POST запросе. Т.е. я создаю HttpWebRequest, получаю GetRequestStream и в этот Stream пишу данные файла. И это дело тупо виснет при вызове GetResponse.
Не виснет, если:
1) До записи в поток указать ContentLength.
2) Если полученный Stream запилить внутрь StreamWriter и писать в этот самый Writer. При этом в хидерах все равно появляется ContentLength
Первое хоть и извращение, но как-то понятно - видимо, не зная размера данных, что-то там внутри этот класс не может сделать.
А вот второе это какая-то малопонятная индусятина вообще - в StreamWriter передается базовый класс Stream, что при этом с этим Stream можно такого сделать (и как вообще такое можно делать?), что запись в него влияет на появление ContentLength в третьем классе. Т.е. это такой невменяемый побочный эффект, причем почему и как - без исходников не поймешь.
Хоть ты блин сделай какой Stream прокси с записью вызовов в лог и всунуть его между Stream и StreamWriter и посмотреть что за методы там дергаются.
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Дано: есть RESTful веб-сервис на дотнете, состоит из нескольких HttpHandler-ов (ну это в дотнете сервлеты так называются). И один из этих хендлеров служил для закачки файлов. Файлов немелкого размера, до 100-200 мб.
Есть клиент (либа для работы с сервером и использующая ее прогу), который эти файлы должен закачивать.
Данные посылаются в POST запросе. Т.е. я создаю HttpWebRequest, получаю GetRequestStream и в этот Stream пишу данные файла. И это дело тупо виснет при вызове GetResponse.
Не виснет, если:
1) До записи в поток указать ContentLength.
2) Если полученный Stream запилить внутрь StreamWriter и писать в этот самый Writer. При этом в хидерах все равно появляется ContentLength
Первое хоть и извращение, но как-то понятно - видимо, не зная размера данных, что-то там внутри этот класс не может сделать.
А вот второе это какая-то малопонятная индусятина вообще - в StreamWriter передается базовый класс Stream, что при этом с этим Stream можно такого сделать (и как вообще такое можно делать?), что запись в него влияет на появление ContentLength в третьем классе. Т.е. это такой невменяемый побочный эффект, причем почему и как - без исходников не поймешь.
Хоть ты блин сделай какой Stream прокси с записью вызовов в лог и всунуть его между Stream и StreamWriter и посмотреть что за методы там дергаются.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
А отладчиком посмотреть не?
no subject
no subject
no subject