|
Тема
|
Zero-Impact-Deployment
|
|
Автор | httpHandler (Нерегистриран) |
Публикувано | 18.10.04 20:11 |
|
Значи, навлязох във very deep shit днес. Става въпрос за ASP.NET.
Правя модул за download на файлове. Целта е файловете да са достъпни за едни протребители, а за други да не са. Преди време, в първоначалната имплементация downloada се правеше по подобен начин:
public void StartDownload()
{
...
Response.WriteFile(this.LocalPath);
...
}
Това ме устройваше перфектно, но се установи, че фреймуърка има бъг при записване на големи файлове - примерно по-големи от 10МВ и затова намерих , който ме устройваше отново. Сега обаче, файловете започнаха да стават много големи (35МВ+) и хората започнаха да ги теглят по-често едновременно и пак имам проблем - почна да свършва паметта (2GB), често файловете не се довършват заради таймаут и т.н. (увеличаването на времето за таймаут не помогна).
Сега реших да подходя по друг начин - написах HttpModule който прихваща Application.AuthenticateRequest и в зависимост от разширението, положението и правата за достъп до файла прави Context.RewritePath(newPath) и т.н. За целта съм мапнал разширенията като "*.zip" към aspnet_isapi.dll. По този начин файловете ми са защитени от неправомерен достъп и всичко е прозрачно за потребителя. Всичко е ОК и работи перфектно до един момент - наложи се да започна да доставям EXE файлове. Съответно когато минат през aspnet_isapi.dll фреймуърка си "мисли" че са HREF Exe (URL launched applications, Auto-Download Deployment или No-Touch Deployment приложения etc) и ги изпълнява
Реших да регистрирам HttpHandler за EXE файловете - System.Web.StaticFileHandler но изглежда че не работи както ми се иска (кaто сложа HttpForbiddenHandler и хендлъра сработва, но разбира се не даунлоудва нищо). Четох за страничните ефекти от това, но за сега съм готов да живея с тях. Друг вариант е да напиша сам Handler но пак ще се наложи да използвам Reponse.WriteFile, което не ме устройва.
Някой има ли идея как да си реша проблема? Може ли изобщо да се забрани изпълняването на ЕХЕ файлове по този начин?
Решения от вида "не давай да се даунлоудват ЕХЕ файлове" и "напиши си ISAPI extension" и "използвай FTP" не ме устройват...
| |
|
А това върше ли работа:
Response.ContentType = "application/x-gzip;charset=windows-1251;";
Response.AddHeader("Content-Disposition", "inline;filename=filename.exe");
Response.WriteFile("c:\\1.exe");
При мен поне не тръгва да изпълнява файла
...and there shall be no more death,neither sorrow...for the former things are passed away
| |
Тема
|
Re: Zero-Impact-Deployment
[re: BlackEarl]
|
|
Автор | httpHandler (Нерегистриран) |
Публикувано | 19.10.04 10:45 |
|
За съжаление точно това ca нещaтa, които се опитвам да избягна -
Response.WriteFile() и Response.WriteBinary().
Това беше първия вариант, който бях направил - описал съм защо отпадна. Проблема не е в липсата на хедъри или неправилни хедъри. Проблема с тези методи е в самия фреймуърк - Microsoft си го признават в линка, който съм дал в предния постинг.
| |
Тема
|
Re: Zero-Impact-Deployment
[re: httpHandler]
|
|
Автор | httpHandler (Нерегистриран) |
Публикувано | 20.10.04 12:48 |
|
Хехе :)
Направих го! (Не мислете повече по проблема)
| |
|
А ще споделиш ли как? Щото мен точно в момента ме занимава почти същото нещо...
но след безсънни дълги нощи станах силен и голям
и вече знам, че мога да се справя сам
| |
|
|
|
|