PDA

View Full Version : سوال: مشکل در دانلود فایل کش شده!!



NasimBamdad
دوشنبه 09 دی 1398, 17:44 عصر
سلام وقت بخیر.
یک قطعه کد ساده دارم که با اون یک فایل رو از web server دانلود می کنم ، وب سرور IIS و هم وب سرور Apache امتحان شده.


using (WebClient webClient = new WebClient())
{
CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStor e);
webClient.DownloadProgressChanged += WebClient_DownloadProgressChanged;
webClient.DownloadFileCompleted += WebClient_DownloadFileCompleted; ;
webClient.DownloadFileAsync(new Uri(url), "updates.zip");
}

و


Uri uri = new Uri(@"http://www.google.com/config.txt");
WebClient webClient = new WebClient
{
CachePolicy =
new RequestCachePolicy(RequestCacheLevel.NoCacheNoStor e)
};

using (Stream stream = webClient.OpenRead(uri))
{
if (stream != null)
{
using (StreamReader streamReader = new StreamReader(stream))
{
url = streamReader.ReadToEnd();
}
}
}


لازم به ذکر که فقط آخرین ورژن از نرم افزار روی سرور هست و به این صورت نیست که چند نسخه باشه ، فقط آخرین و یک نسخه. پس خبری از نسخه های قدیمی نیست

مشکلی که دارم اینه که خیلی وقتا فایلی دانلود میشه که مربوط به چندین نسخه قبل تر هست ، و اصلا به شک می افتم که اون فایل اصلا از کجا دانلود شده ؟ کجا کش شده؟

مثلا با نت ایرانسل این مشکل خیلی هست ولی با adsl شرکت ها به ندرد ، در اینترنت عراق که خیلی مشکل داره این مورد زیاده.
با ایرانسل تماس گرفتم و گفتند بله برای رعایت کیفیت مشترکین و چون خیلی یوزر داریم از کش استفاده می کنیم و تایمش طولانیه.شما بیا در فایل های asp.net خودت از no cache استفاده کن.حالا هی من توضیح میدادم این داستان که اصلا asp.net نیست و یارو در این حد بلد بود.

از طریق IIS هم کش رو کلا غیر فعال کردم ، ولی تاثیر گذار نبود.وقتی فایل رو مثلا با IDM دانلود می کنم درسته ، ولی با این دستور ها مشکل داره.به نظر شما چه باید کرد؟ از FTP استفاده کنم؟سرعت FTP خیلی کمه.

ممنونم

the king
دوشنبه 09 دی 1398, 21:10 عصر
سلام وقت بخیر.
یک قطعه کد ساده دارم که با اون یک فایل رو از web server دانلود می کنم ، وب سرور IIS و هم وب سرور Apache امتحان شده.


using (WebClient webClient = new WebClient())
{
CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStor e);
webClient.DownloadProgressChanged += WebClient_DownloadProgressChanged;
webClient.DownloadFileCompleted += WebClient_DownloadFileCompleted; ;
webClient.DownloadFileAsync(new Uri(url), "updates.zip");
}

و


Uri uri = new Uri(@"http://www.google.com/config.txt");
WebClient webClient = new WebClient
{
CachePolicy =
new RequestCachePolicy(RequestCacheLevel.NoCacheNoStor e)
};

using (Stream stream = webClient.OpenRead(uri))
{
if (stream != null)
{
using (StreamReader streamReader = new StreamReader(stream))
{
url = streamReader.ReadToEnd();
}
}
}


لازم به ذکر که فقط آخرین ورژن از نرم افزار روی سرور هست و به این صورت نیست که چند نسخه باشه ، فقط آخرین و یک نسخه. پس خبری از نسخه های قدیمی نیست

مشکلی که دارم اینه که خیلی وقتا فایلی دانلود میشه که مربوط به چندین نسخه قبل تر هست ، و اصلا به شک می افتم که اون فایل اصلا از کجا دانلود شده ؟ کجا کش شده؟

مثلا با نت ایرانسل این مشکل خیلی هست ولی با adsl شرکت ها به ندرد ، در اینترنت عراق که خیلی مشکل داره این مورد زیاده.
با ایرانسل تماس گرفتم و گفتند بله برای رعایت کیفیت مشترکین و چون خیلی یوزر داریم از کش استفاده می کنیم و تایمش طولانیه.شما بیا در فایل های asp.net خودت از no cache استفاده کن.حالا هی من توضیح میدادم این داستان که اصلا asp.net نیست و یارو در این حد بلد بود.

از طریق IIS هم کش رو کلا غیر فعال کردم ، ولی تاثیر گذار نبود.وقتی فایل رو مثلا با IDM دانلود می کنم درسته ، ولی با این دستور ها مشکل داره.به نظر شما چه باید کرد؟ از FTP استفاده کنم؟سرعت FTP خیلی کمه.

ممنونم
همین که اون کسی باهاش صحبت کردید می دونسته asp.net اسم یک قطعه سخت افزاری در مادربورد نیست جای شکر داره.
نرم افزار های مدیریت دانلود در Header درخواست شون Cache-Control رو no-cache میفرستند.
اگه در دانلود مشکلی ایجاد نمیکنه، یک راه موثر اینه که بصورت پارامتر Get یک مقدار تصادفی ارسال کنید تا دیگه نسخه کش شده تحویلتون نده.

var rnd = new Random();
webClient.DownloadFileAsync(new Uri(url), "updates.zip?id=c" + rnd.Next().ToString() + rnd.Next().ToString());


در ضمن احتمال داره که اگه بجای WebClient با HttpWebRequest دانلود کنید و در درخواست از request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCac heNoStore) استفاده کنید، راضی بشه که براتون نسخه کش شده ارسال نکنه.

NasimBamdad
سه شنبه 10 دی 1398, 17:36 عصر
مشکل من اینه که یک فایل ثابت هر سری دانلود می کنم به این صورت :



http://www.site.com/update/updates.zip


در فایل کانفیگ این آدرس ثابت قید شده ، به نظر شما چه طور میشه از اسم های تصادفی استفاده کرد و این مقدار رو بتونیم در فایل کانفیگ پوشش بدیم؟ مثلا آدرس رو در یک فایل تست بنویسیم و هر سری اون رو تغییر بدیم؟ چه راه بهینه ای مد نظر شما است؟