PDA

View Full Version : فرق برنامه های معمولی با برنامه هایی که تحت شبکه کار میکنن چیه؟



zayens
چهارشنبه 13 مرداد 1389, 00:06 صبح
فرق برنامه های معمولی با برنامه هایی که تحت شبکه کار میکنن چیه؟
من یه برنامه نوشتم که هر کاربر با نام کاربری و پسورد خاص خودش میتونه واردش بشه.
حالا میخواستم بدونم اگر برنامه در یک سرور نصب بشه، آیا چند کاربر میتونن تحت شبکه
همزمان واردش بشن؟ آیا نیازی نیست در کد ها تغییری بدم؟ آیا مشکلی برای برنامه پیش
نمیاد؟منظورم کار با دیتاست.
قبلا از راهنماییتون کمال تشکر دارم.

jalalx
چهارشنبه 13 مرداد 1389, 05:49 صبح
منظورم کار با دیتاست.

اگر برنامه داره با SQL Server کار می کنه تنها دقدقه ی شما Connection String و چند تا تنظیم کوچولو مربوط به permission ها در SQL Server هست اما اگه دارید راجع به Socket Programming حرف می زنید تا دلتون بخواد نکات ریز و درشت هست... :لبخند:

karim_medusa
چهارشنبه 13 مرداد 1389, 08:21 صبح
مشکل همزمانی ممکن براتون مهم باشه. ویرایش و حذف رکورد ها همزمان توسط چند کاربر و اینا.

zayens
چهارشنبه 13 مرداد 1389, 09:24 صبح
اگر برنامه داره با SQL Server کار می کنه تنها دقدقه ی شما Connection String و چند تا تنظیم کوچولو مربوط به permission ها در SQL Server هست
دیتابیس برنامه با sql2008 نوشته شده و به برنامه Add شده.
این هم کانکشن استرینگ


Mycn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=
|DataDirectory|\MYDATEBASE.mdf;Integrated Security=True;Connect
Timeout=30;User Instance=True;");

تغییرات و تنظیمات را چه طور باید لحاظ کنم؟


مشکل همزمانی ممکن براتون مهم باشه. ویرایش و حذف رکورد ها همزمان توسط چند کاربر و اینا.
مثلا اگر دو رکورد را همزمان حذف بشه اگه در برنامه از {}try{}catch استفاده کنیم مشکلی پیش نمیاد.
البته ویرایش را نمیدونم چی کار کنم.
آیا میشه کاری کرد که اگر کاربری در هر قسمت از برنامه دکمه ی "ویرایش" را کلیک کنه و کاربر
دیگه ای هم به همون صفحه جهت ویرایش بره متوجه بشه که یک کاربر دیگه در حال ویرایشه؟

karim_medusa
چهارشنبه 13 مرداد 1389, 09:46 صبح
دو کاربر یک رکورد یکسانی رو بازیابی می کنند .
اولی می خواد حذف می کنه و دومی می خواد ویرایش کنه.

- کاربر اول اگر کارش زودتر انجام بده که دومی با خطا مواجه میشه. اول حذف و بعد ویرایش .

اگر دومی زود تر ویرایش کنه و اولی حذف کنه . خطایی پیش نمیاد فقط داده از بین میره. یعنی کاربر دوم فکر می کنه که داده تغییر یافته خودش ذخیره شده در حالی که کاربر اول اونو پاک کرده.

برای حالتی که هر دو کاربر می خوان ویرایش کنند هم این مشکل بوجود میاد که کاربری که اول ویرایش می کنه داده اون از بین میره.

ostovarit
چهارشنبه 13 مرداد 1389, 11:54 صبح
اگر برنامه داره با SQL Server کار می کنه تنها دقدقه ی شما Connection String و چند تا تنظیم کوچولو مربوط به permission ها در SQL Server هست اما اگه دارید راجع به Socket Programming حرف می زنید تا دلتون بخواد نکات ریز و درشت هست... :لبخند:

لطفا درباره Socket Programming توضیح بدید چی هست ؟
چقدر طول میکشه تا یک برنامه نویس سی شارپ یاد بگیردش ؟
و چه قابلیتهایی داره؟
استفاده کردن و نکردن ازش چه فایده و ضرر هایی داره ؟

با تشکر

zayens
چهارشنبه 13 مرداد 1389, 16:21 عصر
ممنون میشم یه نفر ، سوالهای قبل را جواب بده.
البته در مورد سوکت پروگرمینگ یه چیزهایی خوندم.
مباحثش گسترده ست.
البته اگه کسی لینکی، چیزی سراغ داره بذاره

حجتی نیا
چهارشنبه 13 مرداد 1389, 17:28 عصر
اگر برنامه در یک سرور نصب بشه، آیا چند کاربر میتونن تحت شبکه
همزمان واردش بشن؟
100%

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

برای حالتی که هر دو کاربر می خوان ویرایش کنند هم این مشکل بوجود میاد که کاربری که اول ویرایش می کنه داده اون از بین میره.
یه پیشنهاد دارم اما هنوز خودم اینکارو نکردم.. مثلا یه متغیر گرفته بشه و هروقت داده ای رو داریم ویرایش میکنیم ، مقداری که نشانگر(کلید) اون رکورد هست رو داخل متغیر قرار بدیم و اگه کامپیوتر دوم خواست داده رو ویرایش کنه اول اون متغیر رو چک کنه و بافی داستان... منتظر نظر دوستان هستم:متفکر:

sadra_r2235
چهارشنبه 13 مرداد 1389, 19:36 عصر
سلام دوستان.
ببینید واسه برنامه نویسی سوکت حتما باید اول ملتی تردینگ رو یاد بگیرید. این باعث میشه اگه چند کاربر به صورت همزمان به سرور شما یا سرور های شما متصل شدند مشکلی واستون به وجود نیاد.
بعد سعی کنید واسه کار با دیتابیس از ویزاردینگ استفاده کنید.چون هم سرعت کار با اون بالا میره هم برنامتون قابل حمل تر میشه. و دیگه نیاز نیست واسه هر در خواست کاربر کلی کد بزنید و در ضمن کد هایی که ویزارد تولید میکنه خیلی بهینه شده و سرعتشم بالا تره.
در ادامه واسه اون مشکلاتی که در همزمانی گفتین بهتره که از message queue( صف پیام ) خود ویندوز استفاده کنید، که سرویسش موجود.
بازم سوال داشتین بگین.

حجتی نیا
چهارشنبه 13 مرداد 1389, 23:35 عصر
بعد سعی کنید واسه کار با دیتابیس از ویزاردینگ استفاده کنید.چون هم سرعت کار با اون بالا میره هم برنامتون قابل حمل تر میشه. و دیگه نیاز نیست واسه هر در خواست کاربر کلی کد بزنید و در ضمن کد هایی که ویزارد تولید میکنه خیلی بهینه شده و سرعتشم بالا تره.
در ادامه واسه اون مشکلاتی که در همزمانی گفتین بهتره که از message queue( صف پیام ) خود ویندوز استفاده کنید، که سرویسش موجود.
توضیح یا منبع یا کتاب یا...

karim_medusa
جمعه 22 مرداد 1389, 07:39 صبح
100%

یه پیشنهاد دارم اما هنوز خودم اینکارو نکردم.. مثلا یه متغیر گرفته بشه و هروقت داده ای رو داریم ویرایش میکنیم ، مقداری که نشانگر(کلید) اون رکورد هست رو داخل متغیر قرار بدیم و اگه کامپیوتر دوم خواست داده رو ویرایش کنه اول اون متغیر رو چک کنه و بافی داستان... منتظر نظر دوستان هستم:متفکر:

معمولا دو روش وجود داره :
1- برای ویرایش یک رکورد بعد از بازیابی ان ، مقادیر قبل از ویرایش رو نگهداری می کنند و قبل از ذخیره رکورد تست می کنند که ایا این همون رکوردی که بازیابی شده است یا نه اگر قبلا توسط یک نفر دیگه تغییر کرده باشه اونوقت مقادیرش با مقادیر ذخیره شده متفاوت خواهد بود . حداقل یک فیلدش .

2- روش دوم اینکه در جدول پایگاه داده یک فیلد اضافه میشه به نام فیلد ورژن . این فیلد با هر بار ویرایش ورزن ان تغییر می کند. تغییر ان یا توسط خود پایگاه انجام میشه یا توسط برنامه نویس . نوع فیلد هم بستگی به پایگاه داده دارد .
در اسکیو ال سرور 2005 یک نوع داده بنام timestamp وجود داره. بعد از هر ویرایش توسط پایگاه این فیلد تغییر می کند. فقط کافیه بعد از بازیابی رکورد این فیلد را ذخیره کرده و قبل از ثبت تغییرات این فیلد را تست کنیم اگر با مقدار قبلی برابر بود اجازه ثبت بدهیم در غیر این صورت قبلا توسط کاربر دیگری ویرایش شده است.

حجتی نیا
جمعه 22 مرداد 1389, 08:27 صبح
در اسکیو ال سرور 2005 یک نوع داده بنام timestamp وجود داره. بعد از هر ویرایش توسط پایگاه این فیلد تغییر می کند. فقط کافیه بعد از بازیابی رکورد این فیلد را ذخیره کرده و قبل از ثبت تغییرات این فیلد را تست کنیم اگر با مقدار قبلی برابر بود اجازه ثبت بدهیم در غیر این صورت قبلا توسط کاربر دیگری ویرایش شده است.
چطوری باید اونو چک کرد ؟؟ (کد ..)

karim_medusa
شنبه 23 مرداد 1389, 08:25 صبح
چطوری باید اونو چک کرد ؟؟ (کد ..)

چک کردنش کاری نداره.
بسته به لایه دیتا اکسس پروژه داره اگر با کمک Linq to sql یا Linq to Entity باشه که بیشتر کار خود Linq انجام میده فقط کافیه پروپرتی های مورد نظر رو درست تنظیم کرد.
اگر از ado.net استفاده بشه که باید کد بنویسید. ( ذخیره مقدار در زمان بازیابی و مقایسه ان قبل از ثبت تغییرات )