metaclass: (Default)
[personal profile] metaclass
Второй день занимаюсь тем, что ребе [livejournal.com profile] theiced называет "ежики, кактус".

Дано: есть RESTful веб-сервис на дотнете, состоит из нескольких HttpHandler-ов (ну это в дотнете сервлеты так называются). И один из этих хендлеров служил для закачки файлов. Файлов немелкого размера, до 100-200 мб.
Есть клиент (либа для работы с сервером и использующая ее прогу), который эти файлы должен закачивать.

Данные посылаются в POST запросе. Т.е. я создаю HttpWebRequest, получаю GetRequestStream и в этот Stream пишу данные файла. И это дело тупо виснет при вызове GetResponse.
Не виснет, если:
1) До записи в поток указать ContentLength.
2) Если полученный Stream запилить внутрь StreamWriter и писать в этот самый Writer. При этом в хидерах все равно появляется ContentLength

Первое хоть и извращение, но как-то понятно - видимо, не зная размера данных, что-то там внутри этот класс не может сделать.
А вот второе это какая-то малопонятная индусятина вообще - в StreamWriter передается базовый класс Stream, что при этом с этим Stream можно такого сделать (и как вообще такое можно делать?), что запись в него влияет на появление ContentLength в третьем классе. Т.е. это такой невменяемый побочный эффект, причем почему и как - без исходников не поймешь.
Хоть ты блин сделай какой Stream прокси с записью вызовов в лог и всунуть его между Stream и StreamWriter и посмотреть что за методы там дергаются.

Date: 2010-05-05 07:54 am (UTC)
From: [identity profile] w00dy.livejournal.com
вы RequestStream закрываете перед вызовом GetResponse?

Date: 2010-05-05 08:12 am (UTC)
wizzard: (Default)
From: [personal profile] wizzard
+1

Date: 2010-05-05 08:13 am (UTC)
From: [identity profile] metaclass.livejournal.com
БЛЯ! Перед! Я его закрываю после :)

Date: 2010-05-05 08:15 am (UTC)
From: [identity profile] w00dy.livejournal.com
хехе, ну так логично. Причём это вроде как даже в msdn описано, или в гугле в первых ссылках. Сами с таким некоторое время назад столкнулись.

Date: 2010-05-05 08:50 am (UTC)
From: [identity profile] metaclass.livejournal.com
Описано. Но я не сообразил что там акцент на "закрывать перед".

Date: 2010-05-06 07:53 am (UTC)
From: [identity profile] eoai.livejournal.com
Так оно обычно и бывает. Сначала рефлектором и какой-то матерью заставляешь работать, а потом находишь строчку мелким шрифтом в мсдн. Опыт, как всегда, появляется сразу после того, как очень был нужен.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 24th, 2025 12:22 pm
Powered by Dreamwidth Studios