-
بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
سلام دوستان وقتتان بخیر
یه برنامه ای هست مال چندسال قبله و با دلفی 7 نوشته شده و تحت شبکه به این صورت که کلاینت ها فایل exe برنامه را دارند و از طریق sp های روی بانک سرور ارتباط برقرار می کنند و کارشون را انجام می دهند . و مستقیم به سرور دسترسی ندارند . حالا اگر تغییری توی فایل برناهم exe ایجاد شود به اجبار باید این فایل توی تمام client ها کپی بشه که با آخرین تغییرات کار کنند .
حالا سوالم :
میخام برنامه را تغییر بدم و روی کلاینت وقتی اجرا میکنند ابتدا به سرور وصل بشه و اگر ورژن برنامه تغییری نکرده اجرا بشه و در غیر این صورت آخرین ورژن را دریافت و سپس اجرا کنه . برای این کار از چه طریقی عمل کنم و طرح را پیاده کنم ؟ از چه ابزار و روشی ؟
دوستانی که تجربه در این زمینه دارند لطف کنند نظرشون را بفرمایند .
ممنونم
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
با سلام
با استفاده از ftp یک فایل txt رو از کلاینت به سرور بریز(محتویات txt ورژن برنامه هست) و بعد درسرور اون رو بخون اگر ورژن قدیمی بود با ftp یه ورژن جدید براش ارسال کن.
اگر نبود که هیچی
به جای txt میتونی از datasnap هم استفاده کنی برای خوندن ورژن و با ftp ورژن جدید بهش بدی
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
سلام.
راه برای این کار زیاده، یکی از راهها اینه که برنامه ای که روی سرور هست، باید ورژن خودش رو جایی ثبت کنه، استفاده از ریسورس خودش توصیه نمی شه. دی بی مکان خوبیه برای این کار.
کلاینت میاد از دی بی آخرین ورژن رو می پرسه، درون خود کلاینت هم ورژن بصورت هارد کد ثبت شده، با اون مقایسه می کنه و بقیه ماجرا.
این که روی سرور چطور ثبت ورژن انجام می شه، هم کاری نداره. کافیه کسی که آخرین آپدیت رو انجام می ده این کار رو کنه تا تمام کلاینت ها در اولین کانکت متوجه بشن.
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
یوسف زالی
سلام.
راه برای این کار زیاده، یکی از راهها اینه که برنامه ای که روی سرور هست، باید ورژن خودش رو جایی ثبت کنه، استفاده از ریسورس خودش توصیه نمی شه. دی بی مکان خوبیه برای این کار.
کلاینت میاد از دی بی آخرین ورژن رو می پرسه، درون خود کلاینت هم ورژن بصورت هارد کد ثبت شده، با اون مقایسه می کنه و بقیه ماجرا.
این که روی سرور چطور ثبت ورژن انجام می شه، هم کاری نداره. کافیه کسی که آخرین آپدیت رو انجام می ده این کار رو کنه تا تمام کلاینت ها در اولین کانکت متوجه بشن.
ممنون آقای زالی و آقای عباسی عزیز
خوب فرض کنیم تشخیص سمت کلاینت انجام شد و ورژن جدید موجود بوده حالا با توجه به اینکه از دلفی 7 استفاده میکنم با چه شیوه ای یا ابزاری فایل برنامه را از سرور به کلاینت انتقال بدم ؟ مشکل همزمانی دریافت توسط کلاینت ها را چطوری مدیریت کنم ؟
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
با سلام،
توضیحات در رابطه با روش صحیح این کار زیاده و اگه در حد چند جمله بود همینجا راهنماییتون میکردم. در صورت تمایل پیام خصوصی بدین یا تماس بگیرید.
موفق باشید.
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
hamid-nic
خوب فرض کنیم تشخیص سمت کلاینت انجام شد و ورژن جدید موجود بوده حالا با توجه به اینکه از دلفی 7 استفاده میکنم با چه شیوه ای یا ابزاری فایل برنامه را از سرور به کلاینت انتقال بدم ؟ مشکل همزمانی دریافت توسط کلاینت ها را چطوری مدیریت کنم ؟
شما اول همون طوری که ورژن رو یکجا ذخیره میکنید ip کسی که این ورژن رو داره هم همراهش ذخیره کنید بعد برای ارسال ورژن جدید باید ip که ذخیره شده رو به سرور ftp بدی تا به اون ارسال کنه.
وقتی به ip ارسال کنی همزمان ارسال نمیکنه یکی یکی ارسال میکنه و احتمال تداخلش صفر میشه.بعد میتونی توی یک memo مدیریت کنی که الان فایل به کلاینت رسیده یانه در بین راه مشکل براش پیش اومده.
روش send , receive در ftp هم توی تالار دلفی هست و راحت هستش خواستی کارباهاش رو توضیح میدم. یا نه خودت تحقیق کنی.
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
ابوالفضل عباسی
شما اول همون طوری که ورژن رو یکجا ذخیره میکنید ip کسی که این ورژن رو داره هم همراهش ذخیره کنید بعد برای ارسال ورژن جدید باید ip که ذخیره شده رو به سرور ftp بدی تا به اون ارسال کنه.
وقتی به ip ارسال کنی همزمان ارسال نمیکنه یکی یکی ارسال میکنه و احتمال تداخلش صفر میشه.بعد میتونی توی یک memo مدیریت کنی که الان فایل به کلاینت رسیده یانه در بین راه مشکل براش پیش اومده.
روش send , receive در ftp هم توی تالار دلفی هست و راحت هستش خواستی کارباهاش رو توضیح میدم. یا نه خودت تحقیق کنی.
جناب عباسی عزیز ممنون از توضیحاتتون
ببینید توی سرور همیشه آخرین ورژن هست یا گذاشته میشه پس اون آی پی که میگید میشه آی پی سرور درسته ؟ بعدم سرور ftp منظورتون چیه ؟ یعنی سوای این سرور ؟؟ سرور ftp باید بفرسته به کلاینت ؟ یا کلاینت ها از ftp درخواست کنند ؟ ببخشید من درست متوجه منظورتون نشدم .
در ضمن فقط یک سرور بیشتر نداریم و sql server روی اون اجرا میشه .
ممنون
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
خب این طوری که گفتید یعنی باید کامل توضیح بدم.
به نام خداوند جان و خرد
ببین دوست عزیز شما یک سیستم مثلا سیستم خودت رو به عنوان سرور قرار میدی(یا همون سیستمی که sqlserver روشه) یعنی در برنامه ات از کامپوننت ftpserver استفاده میکنی که قراره ورژن و ip کلاینت هایی که ورژنشون قدیمی هست رو بگیره (مثلا در فایل txt) بعد ورژن و ip رو توی یه متغیر میریزی و چک میکنی ببینی این ورژن قدیمی هست یانه.
حال اگر ورژن قدیمی بود در برنامه ات یه کامپوننت ftp استفاده میکنی با استفاده از اون ورژن جدید که روی سیستمت داری رو براش میفرستی چه جوری؟
به ip میفرستی که کلاینت همراه با ورژنش فرستاد بعد اون در برنامه اش کامپوننت ftp داره این ورژن جدید رو دریافت میکنه.
به همین سادگی .سورس ارسال و دریافت فایل با Ftp توی اینترنت هست میتونی ببینی و ازش الگو بگیری.
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
ابوالفضل عباسی
خب این طوری که گفتید یعنی باید کامل توضیح بدم.
به نام خداوند جان و خرد
ببین دوست عزیز شما یک سیستم مثلا سیستم خودت رو به عنوان سرور قرار میدی(یا همون سیستمی که sqlserver روشه) یعنی در برنامه ات از کامپوننت ftpserver استفاده میکنی که قراره ورژن و ip کلاینت هایی که ورژنشون قدیمی هست رو بگیره (مثلا در فایل txt) بعد ورژن و ip رو توی یه متغیر میریزی و چک میکنی ببینی این ورژن قدیمی هست یانه.
حال اگر ورژن قدیمی بود در برنامه ات یه کامپوننت ftp استفاده میکنی با استفاده از اون ورژن جدید که روی سیستمت داری رو براش میفرستی چه جوری؟
به ip میفرستی که کلاینت همراه با ورژنش فرستاد بعد اون در برنامه اش کامپوننت ftp داره این ورژن جدید رو دریافت میکنه.
به همین سادگی .سورس ارسال و دریافت فایل با Ftp توی اینترنت هست میتونی ببینی و ازش الگو بگیری.
:لبخند::لبخند::تشویق::تشویق:: شویق:
عجب به نام خدایی نوشتین !! خخخ
خیلی ممنونم میرم روش کار میکنم به مشکل خوردم ازتون کمک میگیرم
این ftpserver از مجموعه indy دیگه درسته ؟
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
بله کل مجموعه ftp از نوع indy هست
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
اگر شما دسترسی روی شبکه تون به نحوی هست که می تونید یکی از درایو ها رو مپ کنید، با تابع کپی به راحتی می تونید فایل رو انتقال بدید.
در غیر این صورت با مجموعه ایندی می تونید این کار رو هم انجام بدید.
باید یک سرویس دهنده روی مقصد بنویسید که پورتش روی مقصد باز باشه. برنامه به اون سرویس کانکت شده و چک می کنه ورژنش چیه، روی همون سوکتی که درخواست داده می تونه پاسخش رو بگیره.
راه دیگه اینه که فایل رو در دی بی ذخیره کنید و برنامه فایل رو به فرم یک کوئری از روی دی بی بگیره و استریم فایل ذخیره کنه، نیازی به نوشتن سرویس روی سرور نیست.
باید ببینید که ملزومات کاری که دارید انجام می دید چیه. این ساده ترین راه برای حالتی بود که مپ نمی تونید کنید ولی دی بی رو می بینید.
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
با سلام
البته دوستان هم اشاره کردند
یه روشی که من چند سال پیش برای حل این مشکل استفاده می کردم این بود که در بانک اطلاعاتی سمت سرور جدولی بود که در اون فایل هایی از برنامه په exe و pbl ها قرار داشتند (Varbinary)و فیلدی که تاریخ و ساعت به روز شدنشون و ورژن فایل ها رو داخلش نگه مداشتم در سمت کلاینت هم یه برنامه کوچک بود که در یک ترد جداگانه قبل از اجرای برنامه اصلی این ورژن ها رو با فایل های سمت کلاینت چک می کرد اگر ورژنی فایلی جدید شده بود اون رو حذف و دباره از بانک اطلاعاتی دریافت می کرد.
من با این روش مشکلی نداشتم و خوب کار میکرد
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
راه دیگه اینه که فایل رو در دی بی ذخیره کنید و برنامه فایل رو به فرم یک کوئری از روی دی بی بگیره و استریم فایل ذخیره کنه، نیازی به نوشتن سرویس روی سرور نیست.
ممنون آفای زالی عزیز
این روش محدودیت حجم نداره احیانا؟ یعنی اگر فایل exe حجمش بالا باشه برای انتقال به سرور فشار نمیاره ؟
اگر قرار شد به این سبک پیاده کنم باید روی یک دیتابیس جدا این کار را بکنم چون دیتابیس اصلی هر شب بک آپ اتوماتیک داره با این کار حجم بک آپ زیاد میشه .
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
amir_alaki
با سلام
البته دوستان هم اشاره کردند
یه روشی که من چند سال پیش برای حل این مشکل استفاده می کردم این بود که در بانک اطلاعاتی سمت سرور جدولی بود که در اون فایل هایی از برنامه په exe و pbl ها قرار داشتند (Varbinary)و فیلدی که تاریخ و ساعت به روز شدنشون و ورژن فایل ها رو داخلش نگه مداشتم در سمت کلاینت هم یه برنامه کوچک بود که در یک ترد جداگانه قبل از اجرای برنامه اصلی این ورژن ها رو با فایل های سمت کلاینت چک می کرد اگر ورژنی فایلی جدید شده بود اون رو حذف و دباره از بانک اطلاعاتی دریافت می کرد.
من با این روش مشکلی نداشتم و خوب کار میکرد
دوست عزیز حجم فایلتون چه قدر بود ؟
چندتا کلاینت داشتید ؟
به طور متوسط چند وقت به چند وقت آپدیت برنامه داشتین ؟
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
باسلام
ما تقریبا 40 تا bpl و dll و 8-7 exe داشتیم اگه اشتباه نکنم این جریان مال سال 84
حجم فایل ها هم متغیر بود الان یادم نیست!!
تعداد کلاینت ها مون هم فکر کنم اون موقه 100 همزمان بود، چون انبارهایی و مراکزی در کل ایران داشتیم و حتی بیرون از ایران هم نمایندگی داشتیم که همه با برنامه کار می کردن
بعضی روزها 2-3 بار در روز هم آپدیت داشتیم البته اون موقع کاری کرده بودیم که در صورت آپدیت برنامه و یا ماژول با توجه به حساسیت ماژول ،در سرور به کلیه کاربران آنلاین در برنامه هشدار میدادیم و اونها هم برنامه هاشون رو می بستند و دباره اجرا می کردند.
البته زیر ساخت شبکه خوبی داشتیم همه جا به هم شبکه بودیم و ActiveDirectory برقرار بود بین کلاینت ها و سرور و کل سیستم.
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
تفاوتی نمی کنه اگر از اس کیو ال استفاده می کنید یا از خصوصیات برنامه نویسی سوکت. به هر حال باید اون حجم اطلاعات از طریق خط ارتباطی شما منتقل بشه.
این اتفاق مگر چقدر در ماه می افته؟ حجم برنامه ها رو هم می تونید با زیپ کردن یا پکینگ تا یک سوم و بیشتر کاهش بدید.
می تونید پارت پارت بفرستید، و ...
طریقه پیاده سازیش متنوعه، حتی می تونید از فایل استریم استفاده کنید، راه راحت استفاده از فیلد blob مثل varbinary و امثالهم است.
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
یوسف زالی
تفاوتی نمی کنه اگر از اس کیو ال استفاده می کنید یا از خصوصیات برنامه نویسی سوکت. به هر حال باید اون حجم اطلاعات از طریق خط ارتباطی شما منتقل بشه.
این اتفاق مگر چقدر در ماه می افته؟ حجم برنامه ها رو هم می تونید با زیپ کردن یا پکینگ تا یک سوم و بیشتر کاهش بدید.
می تونید پارت پارت بفرستید، و ...
طریقه پیاده سازیش متنوعه، حتی می تونید از فایل استریم استفاده کنید، راه راحت استفاده از فیلد blob مثل varbinary و امثالهم است.
ممنون آقای زالی عزیز
بله sql استفاده می کنم
از فیلد blob استفاده میکنم ببینم جواب میده یا نه .
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
blob منظورم نوع خاص نبود، از varbinary استفاده کنید مگر این که در نسخه شما موجود نباشه.
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
یوسف زالی
blob منظورم نوع خاص نبود، از varbinary استفاده کنید مگر این که در نسخه شما موجود نباشه.
نسخه sql server 2012 است
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
با سلام
این لینک ببین
یادم که یک کامپونتی هم این کار می کرد
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
آقا LMD یه کامپوننت داره اینکار رو میکنه
من ازش استفاده کردم خوبه
ولی بنا به دلایلی بعدها خودم با سوکت نوشتم و پکت بندی کردم
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
دوستان من برای این کار یک sp درج در بانک نوشتم و یک sp انتخاب کننده که تشریح اون در این تاپیک هست
در مورد insert کردن مشکلی نیست ولی در مورد ذخیره اون فایل انتخاب شده در دیسک محلی مشکل دارم در واقع همون کار با stream هاست که متاسفانه به جواب نرسیدم ممنون میشم اگر دوستان راهنمایی کنند شرح مشکل را در همین لینک تاپیک بالا که گذاشتم هست
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
باسلام
این کد فکر کنم مشکلتون رو حل کنه البته این برای عکس و فایل pdf مثال زده ولی خوب فرقی با مورد شما نداره
فقط باید یکم ریزه کاری بهش اضافه کنید
ورژن قبلی فایل روی کلاینت رو بدست بیارید و یا از تاریخ ساخته شدنش روی کلاینت (اگه وجود داره روی کلاینت) و فایل جدید رو بازیابی کنید
procedure TForm1.Button1Click(Sender: TObject);
var
iPKey:integer;
MStream:TMemoryStream;
Sig1,Sig2: WORD; //16-bit unsigned integer = 2 bytes
begin
iPKey:=StrToInt(ediPKey.Text);
ADODataSet1.Connection:=ADOConnection1;
ADODataSet1.CommandText:='Select * From lmgTbl Where PKey=:param0';
ADODataSet1.Parameters.ParamByName('param0').Value :=iPKey;
ADODataSet1.Open;
MStream:=TMemoryStream.Create;
try
TBlobField(ADODataSet1.FieldByName('Image')).SaveT oStream(MStream);
MStream.Seek(0, soFromBeginning);
MStream.Read(Sig1,2);
MStream.Position := 2;
MStream.Read(Sig2,2);
if (Sig1=$4D42) then // little Endian format of the first 2 bytes of bitmap
begin
MStream.SaveToFile('Img'+IntToStr(iPKey)+'.bmp');
ShowMessage('File saved as Bitmap');
end
else
//ShowMessage('File is not Bitmap');
if (Sig1 = $D8FF) and (Sig2 = $E0FF) then // little Endian format of the first 4 bytes of JPEG
begin
MStream.SaveToFile('Img'+IntToStr(iPKey)+'.jpg');
ShowMessage('File saved as JPEG');
end
else
if (Sig1 = $4947) and (Sig2 = $3846) then // little Endian format of the first 4 bytes of GIF
begin
MStream.SaveToFile('Img'+IntToStr(iPKey)+'.gif');
ShowMessage('File saved as GIF');
end
else
if (Sig1 = $5025)and (Sig2 = $4644) then // // little Endian format of the first 4 bytes of PDF
begin
MStream.SaveToFile('Doc'+IntToStr(iPKey)+'.pdf');
ShowMessage('File saved as PDF');
end
else
if (Sig1 = $CFD0) and (Sig2 = $E011) then // // little Endian format of the first 4 bytes of DOC
begin
MStream.SaveToFile('Doc'+IntToStr(iPKey)+'.doc');
ShowMessage('File saved as DOC');
end
else
if (Sig1 = $4B50) and (Sig2 = $0403) then // // little Endian format of the first 4 bytes of ZIP
begin
MStream.SaveToFile('Archive'+IntToStr(iPKey)+'.zip ');
ShowMessage('File saved as ZIP');
end
else
begin // unrecognized
MStream.SaveToFile('File'+IntToStr(iPKey)+'.dat');
ShowMessage('Unrecognized file format! '+#13+'saved with .dat extension');
end;
finally
MStream.Free;
end;
end;
end;
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
ممنونم بررسی می کنم اطلاعش را می دهم
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
دوست عزیز این کد شما خیلی خیلی جامع هست.
به نظرم یکم باید سبکتر میگذاشتی تا دوست عزیزمون و دیگران راحتتر درک کنن
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
این کد میاد بایت اول اون فایل را میخونه و تشخیص میده که از چه نوعی بوده من اون قسمت هاش را جدا کردم از کد و فقط قسمت اصلی را بکار بردم و انجام دادم اما فایل exe ای که میسازه حجمش 1 بایته :گریه:
نمی دونم کجای کار مشکل داره :متفکر:
یعنی درست در جدول insert نشده ؟
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
با سلام
نقل قول:
نوشته شده توسط
ابوالفضل عباسی
دوست عزیز این کد شما خیلی خیلی جامع هست.
به نظرم یکم باید سبکتر میگذاشتی تا دوست عزیزمون و دیگران راحتتر درک کنن
حق با شماست، متشکر اشاره کردین
در مورد ذخیره شدن 1 بایت شما MStream.Size رو قبل از سیو نگاه کنین ببینین چقدره؟
چون کد خیلی کاری با مقادیر قایل نمی کنه فقط برای فهمیدن نوع فایل از هدر 4 بایت رو می خونه و بعد سیو میکنه
با تشکر
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
روش خوبی برای ارسال ورژن جدید به کلاینت ها هست اما
اگر توی این موقعی که داره خواندن بانک انجام میشه تا تبدیل به exe کنه یک بایت در بانک دچار فروریزش اطلاعاتی بشه ممکنه exe کارنکنه و کلاینت به مشکل بربخوره.
بنظرم باید فایل یک جا با روش ftp یا datasnap ارسال بشه که یا فایل کلا نیاد و یا کامل بیاد.
من خودم وقتی یه فایل رو میخوام از ویندوز به موبایلم بفرستم.با روش ftp که روی هر دو نوشته ام فایل رو انتقال میدم بدون هیچ دردسری(مثل زاپیا و shareIt ،چون با وای فای میفرستم سرعتش هم خوبه)
اما اینکه در بانکه ممکنه حجم متنی توی بانک زیاد باشه و سیستم درگیر خواندن بشه و زمان زیادی ببره:اشتباه:
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
ابوالفضل عباسی
روش خوبی برای ارسال ورژن جدید به کلاینت ها هست اما
اگر توی این موقعی که داره خواندن بانک انجام میشه تا تبدیل به exe کنه یک بایت در بانک دچار فروریزش اطلاعاتی بشه ممکنه exe کارنکنه و کلاینت به مشکل بربخوره.
بنظرم باید فایل یک جا با روش ftp یا datasnap ارسال بشه که یا فایل کلا نیاد و یا کامل بیاد.
من خودم وقتی یه فایل رو میخوام از ویندوز به موبایلم بفرستم.با روش ftp که روی هر دو نوشته ام فایل رو انتقال میدم بدون هیچ دردسری(مثل زاپیا و shareIt ،چون با وای فای میفرستم سرعتش هم خوبه)
اما اینکه در بانکه ممکنه حجم متنی توی بانک زیاد باشه و سیستم درگیر خواندن بشه و زمان زیادی ببره:اشتباه:
درسته حق باشماست من اومدم راحت ترین کار را انتخاب کردم
نمونه برنامه یا سورسی در مورد مطالبی که گفتید دارین که بتونم ازش ایده بگیرم ؟
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
برای ftp توی اینترنت فراوان یافت میشه اما این کامله:
indy-FTP
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
amir_alaki
با سلام
حق با شماست، متشکر اشاره کردین
در مورد ذخیره شدن 1 بایت شما MStream.Size رو قبل از سیو نگاه کنین ببینین چقدره؟
چون کد خیلی کاری با مقادیر قایل نمی کنه فقط برای فهمیدن نوع فایل از هدر 4 بایت رو می خونه و بعد سیو میکنه
با تشکر
همون یک بایت را نشون میده .
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
باسلام
فکر کنم بشه این مشکل رو حل کرد به اینصورت که فایل اگه کوچیکه که خیلی مشکل نداره دباره از سرور دانلودش کنین، اگه بزرگه بشکنینش و هر تیکه رو ارسال کنبن و در هر ارسال برای بررسی درستی فایل ارسالی روش های Error detection مانند ParityBit یا checkSum رو برای اون تیکه استفاده کنین و فایل رو سرهم کنین.
برای ارسال و دریافت اطلاعات معمولا چون کانال های ارتباطی (شبکه) ممکنه نویز دار باشن(مثل همین موردی که دوستمون گفتن فروریزش اطلاعات) از روش هایی که در نظریه اطلاعات هست و مربوط به انتقال اطلاعات در انواع کانال ها با نویر های متفاوت (محدود) وجود داره استفاده می کنن، فرض کنید اطلاعات یک فرستنده در یک ماهواره رو می خواید دریافت کنین اون موقع اگه اشتباه مخابره بشه و یا همراه با نویز باشه که فاتحه کار خوندس، ولی با روش هایی میشه تاحدودی برای این مشکل چاری ایی اندیشید.
در مورد Ftp به سوال برام پیش اومد امنیت سرور رو پایین نمیاره؟و فکر کنم در فایل هایی با حجم بالا هم دچاره مشکل بشه
البته این نطر منه
تشکر
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
hamid-nic
همون یک بایت را نشون میده .
فیلد بانک اطلاعاتی از چه نوعی هست؟
با تابع
DATALENGTH([_File])
در SQl اندازه رو چک کن ببین چقدر ذخیره شده.
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
amir_alaki
فیلد بانک اطلاعاتی از چه نوعی هست؟
با تابع
DATALENGTH([_File])
در SQl اندازه رو چک کن ببین چقدر ذخیره شده.
بله چک کردم متاسفانه همون 1 بایته
این نشون میده درست insert نشده . اما روش من کجاش مشکل داره ؟؟؟:متفکر:
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
با سلام
كد ثبت كه نوشتين چيه؟
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
amir_alaki
با سلام
كد ثبت كه نوشتين چيه؟
بله مشکل از sp که عملیات insert را انجام می داد بود که این sp را اینجا میزارم برای همه ی کسانی که یه روزی به این مشکل برمی خورند و به این تاپیک می رسند البته این sp از نوع update می باشد به هر شکلی که دوست داشته باشید تغییرش دهید :
این sp بدون هیچ مشکلی کار میکنه و فیلد varbinary را در دیتابیس ذخیره می کنه .
ALTER PROCEDURE [dbo].[sp_LastExe_Update]
@CodeExe tinyint,
@NameFile nvarchar(254) = NULL,
@VersionFile int = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL varbinary(max)
DECLARE @str nvarchar(400)
SET @str = N'SELECT @SQL = CAST( bulkcolumn AS VARBINARY(max) ) FROM '
SET @str =@str+ N' OPENROWSET( BULK '''
SET @str =@str+ @NameFile
SET @str =@str+ N''', SINGLE_BLOB ) AS x'
EXEC sp_executeSQL @str, N'@SQL varbinary(max) OUT', @SQL OUTPUT;
Update LastExe
Set
[namefile]=@NameFile,
[sizefile]=DATALENGTH(@SQL),
[VersionFile]=@VersionFile,
[datecreate]=getdate(),
[ExeFile]=@SQL
where
CodeExe=@CodeExe
END
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
بسيار عالي،اينكه به اين صورت فايل رو در جدول ذخيره ميكنين احتمال حمله به سرورتون رو زياد ميكنه،هر كسي كه بخواهد شيطوني بكنه ميشه و با اين sp ميتونه.
فكر كنم اگه داخل برنامه تبديل بشه و فقط محتويات فايل به sp ارسال بشه بهتره تا آدرس فايل،اينجوري خودت ميتوني براي محكم كاري يه تغيرم در اطلاعات فايل بدي مثلا كدش كني و يا هر كار ديگه و موقع بازيابي فايل عكس اين عمليات رو انجام بدي، يعني طوري كه اين فايل هاي ذخيره شده در بانك فقط با برنامه خودت از سرور گرفته بشن، براي كلاينت هايي كه مجاز هستند.
البته اين فقط نظر منه
موفق باشي
-
نقل قول: بروز رسانی خودکار برنامه از سرور (دریافت آخرین ورژن برنامه از سرور توسط کلاینت ها)
نقل قول:
نوشته شده توسط
amir_alaki
بسيار عالي،اينكه به اين صورت فايل رو در جدول ذخيره ميكنين احتمال حمله به سرورتون رو زياد ميكنه،هر كسي كه بخواهد شيطوني بكنه ميشه و با اين sp ميتونه.
فكر كنم اگه داخل برنامه تبديل بشه و فقط محتويات فايل به sp ارسال بشه بهتره تا آدرس فايل،اينجوري خودت ميتوني براي محكم كاري يه تغيرم در اطلاعات فايل بدي مثلا كدش كني و يا هر كار ديگه و موقع بازيابي فايل عكس اين عمليات رو انجام بدي، يعني طوري كه اين فايل هاي ذخيره شده در بانك فقط با برنامه خودت از سرور گرفته بشن، براي كلاينت هايي كه مجاز هستند.
البته اين فقط نظر منه
موفق باشي
بله ممنون از راهنمایی هاتون . البته دیتابیسی که برنامه را نگه میداره از دیتابیس اصلی جداست . هیچ کسی هم تحت هیچ شرایطی به سرور دسترسی نداره و صد البته شرایط خاص دیگه ای هم هست که دیگه اینجا نیاوردم اون کد بالا بصورت خام نوشته شده و اصل کار را بیان کردم برای کسی که مثل من به مشکل بربخوره و کارش راه بیفته . :چشمک:
برای این کار بهتر از این روش هم هست ولی من با توجه به شرایط پروژه این روش را انتخاب کردم.