счетчик для ссылок
От: Аноним  
Дата: 22.08.03 07:48
Оценка:
Здравствуйте господа!

Я только начал изучать C# и .NET. Меня интересует вопрос каким образом можно организовать счетчик загруженных программ со страницы? Я попробовал варианты с FileSystemWatcher (этот класс не может отслеживать чтение файлов), HttpHadler. Информацию я собираюсь хранить в виде сериализованного объекта. Подскажите решение вопроса или может этот "велосипед" уже изобретён?

сувж К.С.


22.08.03 11:57: Перенесено модератором из '.NET' — AVK
Re: счетчик для ссылок
От: ventyl Россия http://ventyl.spb.ru/
Дата: 22.08.03 08:06
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Я только начал изучать C# и .NET. Меня интересует вопрос каким образом можно организовать счетчик загруженных программ со страницы? Я попробовал варианты с FileSystemWatcher (этот класс не может отслеживать чтение файлов), HttpHadler. Информацию я собираюсь хранить в виде сериализованного объекта. Подскажите решение вопроса или может этот "велосипед" уже изобретён?

Надо сделать не прямое скачивание, когда например
<a href="/downloads/program.exe">download program.exe</a>

а скачивание через "подающий" скрипт, типа
<a href="/downloader.aspx?filename=program.exe">download program.exe</a>

этот самый "подающий" скрипт (downloader.aspx) может выглядеть так:

private void Page_Load(object sender, System.EventArgs e)
{
// увеличиваем простенький счетчик
Application["counter"]++;

//имя файла
string FileName = Request.QueryString["filename"];

// "подаем" файл
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.WriteFile(FileName);
Response.End();
}

Это код только примерный, наверное даже в нем ошибки но смысл такой... Кстати, так можно ограничить доступ к скачиваемому файлу...
Re[2]: счетчик для ссылок
От: Gollum Россия  
Дата: 22.08.03 08:14
Оценка:
Здравствуйте, ventyl, Вы писали:

V>private void Page_Load(object sender, System.EventArgs e)

V>{
V> // увеличиваем простенький счетчик
V> Application["counter"]++;

V> //имя файла

V> string FileName = Request.QueryString["filename"];

V> // "подаем" файл

V> Response.Clear();
V> Response.ContentType = "application/octet-stream";
V> Response.WriteFile(FileName);
V> Response.End();
V>}

V>Это код только примерный, наверное даже в нем ошибки но смысл такой... Кстати, так можно ограничить доступ к скачиваемому файлу...


Есть ошибки... Так как вот эти странички могут запрашиваться многими пользователями, возможна такая ситуация:

Application["counter"] = 0

User A берет Application["counter"] = 0
User B берет Application["counter"] = 0

User A делает 0 + 1 = 1
User B делает 0 + 1 = 1

User A делает Application["counter"] = 1
User В делает Application["counter"] = 1

Нужно либо лочить Application (потенциально опасно для производительности), либо хранить где-то еще. Либо парсить логи IIS для данной странички
Моя смерть ездит в черной машине с голубым огоньком
Eugene Agafonov on the .NET

Re[3]: счетчик для ссылок
От: ventyl Россия http://ventyl.spb.ru/
Дата: 22.08.03 08:43
Оценка:
Здравствуйте, Gollum, Вы писали:
G>Есть ошибки... Так как вот эти странички могут запрашиваться многими пользователями, возможна такая ситуация:

Это не суть важно. На самом деле счетчик через Application делать не нужно, нужно в БД сохранять или в файл на крайний случай.
Re[2]: счетчик для ссылок
От: Alarm Россия  
Дата: 22.08.03 08:51
Оценка:
Здравствуйте, ventyl, Вы писали:

V>Надо сделать не прямое скачивание, когда например

V><a href="/downloads/program.exe">download program.exe</a>
.....

V>Это код только примерный, наверное даже в нем ошибки но смысл такой... Кстати, так можно ограничить доступ к скачиваемому файлу...


Я (тот кто задавал вопрос — Сергей) попробовал ваше решение , но только вместо загрузки файла, загружается (записывается на диск) не файл, а сама страница.aspx . Не подскажите где я ошибся? Заранее благодарен.
Шуруп забитый молотком, держит лучше чем гвоздь закрученный отверткой.
Re[3]: счетчик для ссылок
От: Геннадий Ким aka ventyl Россия http://ventyl.spb.ru/
Дата: 22.08.03 09:01
Оценка: 4 (1)
Здравствуйте, Alarm, Вы писали:

A>Я (тот кто задавал вопрос — Сергей) попробовал ваше решение , но только вместо загрузки файла, загружается (записывается на диск) не файл, а сама страница.aspx . Не подскажите где я ошибся? Заранее благодарен.


На самом деле это имя файла просто такое на диск записывается. Надо так (добавить Content-Disposition в Header):

// "подаем" файл
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.ContentType = "application/octet-stream";
Response.WriteFile(FileName);
Response.End();
Re[2]: счетчик для ссылок
От: mogadanez Чехия  
Дата: 22.08.03 09:19
Оценка:
Здравствуйте, ventyl, Вы писали:

V>Это код только примерный, наверное даже в нем ошибки но смысл такой... Кстати, так можно ограничить доступ к скачиваемому файлу...


но надо понимать также что это ликвидирует возможность докачки файлов для пользователей.
... << RSDN@Home 1.0 beta 7a >>
Re[4]: счетчик для ссылок
От: Gollum Россия  
Дата: 22.08.03 09:31
Оценка:
Здравствуйте, ventyl, Вы писали:

V>Это не суть важно.


Это суть важно

V>На самом деле счетчик через Application делать не нужно, нужно в БД сохранять или в файл на крайний случай.


И предусмотреть возможность блокировок и конкурентного доступа, которые никуда не изчезают.
В лучших книгах всегда нет имен, и в лучших картинах — лиц
Eugene Agafonov on the .NET

Re[5]: счетчик для ссылок
От: mogadanez Чехия  
Дата: 22.08.03 09:46
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, ventyl, Вы писали:


V>>Это не суть важно.


G>Это суть важно


V>>На самом деле счетчик через Application делать не нужно, нужно в БД сохранять или в файл на крайний случай.


G>И предусмотреть возможность блокировок и конкурентного доступа, которые никуда не изчезают.


на самом деле не совсем, я бы не увеличивал конкретное поле в базе, а вел бы лог, типа при каждой скачке в таблицу Downloads добавлялась бы запись вроде
FileID;IP;DateTime
так проще, и заодно можно статистику вести когда больше качают.
... << RSDN@Home 1.0 beta 7a >>
Re[6]: счетчик для ссылок
От: Gollum Россия  
Дата: 22.08.03 09:48
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>на самом деле не совсем, я бы не увеличивал конкретное поле в базе,


Я бы тоже. Я просто отвечаю человеку, который говорит, что проблемы синхронизации — это не суть важно.

M>а вел бы лог, типа при каждой скачке в таблицу Downloads добавлялась бы запись вроде

M>FileID;IP;DateTime так проще, и заодно можно статистику вести когда больше качают.

Более того, IIS такой лог уже ведет (если поставлена соотв. галочка.), и я в своем постинге Re[2]: счетчик для ссылок
Автор: Gollum
Дата: 22.08.03
уже предложил использовать его.
He's taking the preventive measures, It must have been too late
Eugene Agafonov on the .NET

Re[7]: счетчик для ссылок
От: Геннадий Ким aka ventyl Россия http://ventyl.spb.ru/
Дата: 22.08.03 10:14
Оценка:
Здравствуйте, Gollum, Вы писали:
G>Я бы тоже. Я просто отвечаю человеку, который говорит, что проблемы синхронизации — это не суть важно.

Я вообще имел ввиду больше отличие прямого скачивания (как изначально я понимаю хотел спрашивающий) от "через подающий aspx". Суть моего ответа в этом, а не в проблемах синхронизации.

Я сам прекрасно знаю и про Lock приложения, и про прочее...
Re[4]: счетчик для ссылок
От: Alarm Россия  
Дата: 22.08.03 10:17
Оценка:
Здравствуйте, Геннадий Ким aka ventyl, Вы писали:


ГКA>На самом деле это имя файла просто такое на диск записывается. Надо так (добавить Content-Disposition в Header):


ГКA>
....
ГКA>Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName);
....
ГКA>


Геннадий, у меня всё закачивается, но только имя для сохраняемого файла не то, что на самом деле , т.е я закачиваю файл с именем *.*, а на диск пишется этот файл но имя у него DownLoad без расширения (по названию страницы которую вызываем). Если к имени добавляю его расширение, то файл становится работоспособным. Не подскажите?
Заранее благодарен. Сергей.
Шуруп забитый молотком, держит лучше чем гвоздь закрученный отверткой.
Re[8]: счетчик для ссылок
От: Gollum Россия  
Дата: 22.08.03 10:21
Оценка:
Здравствуйте, Геннадий Ким aka ventyl, Вы писали:

ГКA>Я сам прекрасно знаю и про Lock приложения, и про прочее...


Тогда потрудитесь пояснять свою точку зрения сразу. Вот цитата из постинга:

G>>Есть ошибки... Так как вот эти странички могут запрашиваться многими пользователями, возможна такая ситуация:

V>Это не суть важно. На самом деле счетчик через Application делать не нужно, нужно в БД сохранять или в файл на крайний случай.


Из этого по-моему никак не следует, что

ГКA>Я вообще имел ввиду больше отличие прямого скачивания (как изначально я понимаю хотел спрашивающий) от "через подающий aspx". Суть моего ответа в этом, а не в проблемах синхронизации.


А телепатическими способностями, увы, не обладаю.
В лучших книгах всегда нет имен, и в лучших картинах — лиц
Eugene Agafonov on the .NET

Re[5]: счетчик для ссылок
От: Геннадий Ким aka ventyl Россия http://ventyl.spb.ru/
Дата: 22.08.03 10:23
Оценка:
Здравствуйте, Alarm, Вы писали:

A>Геннадий, у меня всё закачивается, но только имя для сохраняемого файла не то, что на самом деле , т.е я закачиваю файл с именем *.*, а на диск пишется этот файл но имя у него DownLoad без расширения (по названию страницы которую вызываем). Если к имени добавляю его расширение, то файл становится работоспособным. Не подскажите?

A>Заранее благодарен. Сергей.

Сергей, смотрите — если указать

Response.AddHeader("Content-Disposition", "attachment; filename=program.exe");

то файл предложится сохранить как program.exe
Re[9]: счетчик для ссылок
От: Геннадий Ким aka ventyl Россия http://ventyl.spb.ru/
Дата: 22.08.03 10:26
Оценка: -1
Здравствуйте, Gollum, Вы писали:

G>Тогда потрудитесь пояснять свою точку зрения сразу. Вот цитата из постинга:


не хочу

я отвечаю по вопросу Сергея, а не по флейму.
Re[6]: счетчик для ссылок
От: Alarm Россия  
Дата: 22.08.03 10:53
Оценка:
Геннадий Ким aka ventyl, Вы писали:

ГКA>Сергей, смотрите — если указать

....
ГКA>то файл предложится сохранить как program.exe


Геннадий, огромное списибо за помощь. Всё заработало, остались мелочи. Всего Вам доброго.
сувж Сергей
Шуруп забитый молотком, держит лучше чем гвоздь закрученный отверткой.
Re[9]: счетчик для ссылок
От: mogadanez Чехия  
Дата: 22.08.03 11:10
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, Геннадий Ким aka ventyl, Вы писали:


ГКA>>Я сам прекрасно знаю и про Lock приложения, и про прочее...


G>Тогда потрудитесь пояснять свою точку зрения сразу. Вот цитата из постинга:


G>

G>>>Есть ошибки... Так как вот эти странички могут запрашиваться многими пользователями, возможна такая ситуация:

V>>Это не суть важно. На самом деле счетчик через Application делать не нужно, нужно в БД сохранять или в файл на крайний случай.


G>Из этого по-моему никак не следует, что


G>

ГКA>>Я вообще имел ввиду больше отличие прямого скачивания (как изначально я понимаю хотел спрашивающий) от "через подающий aspx". Суть моего ответа в этом, а не в проблемах синхронизации.


G>А телепатическими способностями, увы, не обладаю.



Ты не прав.... прочти еще раз, про "не суть важно" писал не Генадий, а Вентиль
... << RSDN@Home 1.0 beta 7a >>
Re[10]: счетчик для ссылок
От: Gollum Россия  
Дата: 22.08.03 11:15
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>Ты не прав.... прочти еще раз, про "не суть важно" писал не Генадий, а Вентиль


G>Здравствуйте, Геннадий Ким aka ventyl, Вы писали:


Грустно все это...
Любая весть изначально благая, просто ты к этому еще не привык
Eugene Agafonov on the .NET

Re[11]: счетчик для ссылок
От: mogadanez Чехия  
Дата: 22.08.03 11:20
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, mogadanez, Вы писали:


M>>Ты не прав.... прочти еще раз, про "не суть важно" писал не Генадий, а Вентиль


G>

G>>Здравствуйте, Геннадий Ким aka ventyl, Вы писали:


G>Грустно все это...


ааа... сразу не допер...
... << RSDN@Home 1.0 beta 7a >>
Re[11]: счетчик для ссылок
От: Геннадий Ким aka ventyl Россия http://ventyl.spb.ru/
Дата: 22.08.03 11:26
Оценка:
Здравствуйте все.

Меня зовут Гена, мой ник ventyl и я сначала выбрал его, но так как я не люблю анонимность то некоторое время решил именоваться настоящим именем.

Просьба не обижаться на меня если я не прав, я первый день тут и еще не привык к нормам поведения, принятым на данном ресурсе.

Что касается слова "суть", которое возможно было не совсем правильно понято, то я имел ввиду такую ситуацию (for example):
Например, спрашивается:

мне нужно вывести картинку в виде круга, я запускаю MS Paint на сервере и генерирую события мыши, рисую круг, сохраняю файл в папке на диске С и потом делаю редирект. Но если два пользователя, то бывают нарушения.

отвечается:

на самом деле лучше делать через GDI+, вот примерный код...

и тут я имел ввиду суть в том, чтобы перейти от Paint к GDI+, а не детали реализации.

Еще раз прошу прощения, что может быть как-то ответил грубо...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.