PDA

View Full Version : برنامه نویسی شبکه



payam_skandari
چهارشنبه 29 فروردین 1386, 16:08 عصر
دوستای عزیز یه شرکت هست که 7 سیستم مالی و حسابداریشو دارم مینویسم . این سیستم روی شبکه و با 50 کاربر کار خواهد کرد .اگه میشه مطالبی رو که در رابطه با کار با بانک اطلاعاتی مهمه که مد نظر داشت رو توضیح بدین.منظورم تداخل کاربر ها موقع ورود رکورد ها با فیلدهاییی که کاملا یکسان هستند. و مثلا یک کاربر چند رکورد رو select کرده و داره ویرایششون میکنه و دقیقا همین موقع یکی یا چند تا از همین رکورد ها توسط کاربر دیگه ای ویرایش میشه.چطور باید این جور چیزها رو هندل کرد. ضمنا دوستان اگر تجربه ای از این دست تو برنامه نویسی شبکه دارن لطف کنن بگن.

ممنون.

hdv212
چهارشنبه 29 فروردین 1386, 22:21 عصر
اول از همه باید مشخص بشه که از چه بانکی استفاده میکنی ؟؟ sql 200o or 2005 بعدش هم برای هر گونه تغییر از Transcation استفاده کن ... این سوالت خیلی کلیه .. بهتره جزییات چیزایی رو گه میخوای بگی ... تا در صورت امکان کمکت کنم

payam_skandari
چهارشنبه 29 فروردین 1386, 23:20 عصر
بانکم sql server 2005 هستش.من خیلی نگران تداخل کاربر ها موقع پاک کردن یا update کردن رکورد هاهستم.بابت اینها دقیقا باید چیکار کرد.اون مورد کلی رو هم که مطرح کردم منظورم این بود که توی این شکل برنامه های چند کاربره روی شبکه چه مشکلات احتمالی مثل همین تداخل ها ممکنه بوجود بیاد و راه حلشون چیه.
ممنون میشم توضیحاتتون حتی الامکان با کد باشه.و احتمالا جامع و با یه نگاه کلی.

electrofanltd
شنبه 12 آبان 1386, 15:49 عصر
بهتره نگهی به کتاب Transact SQL بندازی

mehdi.mousavi
شنبه 12 آبان 1386, 19:46 عصر
بانکم sql server 2005 هستش.من خیلی نگران تداخل کاربر ها موقع پاک کردن یا update کردن رکورد هاهستم.بابت اینها دقیقا باید چیکار کرد.اون مورد کلی رو هم که مطرح کردم منظورم این بود که توی این شکل برنامه های چند کاربره روی شبکه چه مشکلات احتمالی مثل همین تداخل ها ممکنه بوجود بیاد و راه حلشون چیه.
ممنون میشم توضیحاتتون حتی الامکان با کد باشه.و احتمالا جامع و با یه نگاه کلی.

سلام.
به این مشکلاتی که شما عنوان کردید، میگن Concurrency یا همزمانی. کنترل این مسائل کاری هستش که شما بعنوان برنامه نویس باید در برنامه انجام بدید. روشهای متعددی برای کنترل همزمانی وجود داره. ممکنه شما روش Last In Wins رو انتخاب کنید، به این معنی که هر کسی که آخرین بار رکورد رو Update کرد، باعث تثبیت اطلاعات در بانک خواهد شد.

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

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

کنترل همزمانی روشهای متفاوتی داره. برای آشنایی با این روشها، به این مقاله رجوع کنید. (http://msdn2.microsoft.com/en-us/library/cs6hb8k4%28VS.80%29.aspx)

اما در مورد Transaction ها. عموما کارهایی که شما میخواهید انجام بدین، به چند کار کوچکتر تقسیم میشن. مثلا حذف یه رکورد پرسنلی، عموما باعث حذف رکورد هایی از جداول متفاوت میشه. شما برای حفظ یکپارچگی بانک، هرگز تمایل ندارید که رکوردی از جدول یک پاک بشه، اما رکورد متناظر با همون کارمند از جدول دو پاک نشه. مثلا آدرس اون کارمند پس از حذف شدن در سیستم باقی بمونه. پس، باید به یه نحوی بتونید بگید که کل این روند یا انجام بشه، یا هیچی انجام نشه و همه چی به وضعیت اولیه برگرده. به این مساله میگن Transaction. تراکنشها رو میتونید در چند سطح کنترل کنید، میتونید در داخل بانک اطلاعاتی و بکمک Stored Procedure ها کنترل کنید، یا در سطح DALc این کنترلها رو اعمال کنید. اما نکته مهم این هستش که حتما این کار رو انجام بدید تا یکپارچگی بانک همواره حفظ بشه. بسته به نوع کاری که میخواهید انجام بدید، این امکان در .dotnetframeowrk 2.0 بوجود اومد تا بتونید عملیات خاص مورد نظرتون رو در یه TransactionScope تعریف کنید. Enlist شدن خودکار Component ها در Transaction این امکان رو بهتون میده که راحتتر کد بنویسید، البته این روش هم کاستیهایی داره که از حوصله این بحث خارجه.

اگر از دو مورد فوق اطمینان حاصل کنید، دیگه لازم نیست نگران دسترسی همزمان کاربران به بانک باشید.

ARA
یک شنبه 13 آبان 1386, 09:38 صبح
این هم نقل قول از یک سایت فکر کنم کمکت کنه


سرویس اعلان (SQL Notification)
همان‌طور که گفتیم سیستم اعلان درSQLServer قادر است پیغام‌هایی را طی زمان‌های مشخص به سمت کاربران بفرستد. مثلاً تصور کنید که تعدادی کاربر در حال اتصال به یک بانک حاوی اطلاعات مربوط به ارزش سهام در بورس هستند. از آن‌جایی که ممکن است قیمت سهام هر شرکت یا مؤسسه برای تعدادی از کاربران از اهمیت زیادی برخوردار باشد، می‌توان این سیستم را طوری تنظیم کرد تا هرگاه ارزش سهام خاصی که موردنظر هر کاربر است تغییر کرد، به صورت اتوماتیک به وی اعلام شود. کاربر هم می‌تواند این تغییرات را برروی برنامه کاربردی خود، تلفن همراه (در قالب Windows Messenger ،(SMS و یا ایمیل به‌صورت مرتب دریافت و مشاهده کند.

jome ramezani
یک شنبه 16 دی 1386, 11:57 صبح
با سلام
بنده هم در حال انجام چنین پروژه ای می باشم ، قرار است در این سیستم کاربری که مسئول خرید است تقاضای خرید نماید، در همان لحظه مدیر سیستم(کاربر دیگری در شبکه ) این تقاضا را رد کند ویا با آن موافقت نماید .
اگه ممکنه من را کمک کنید که چطور هنگام تقاضا خرید از کامپیوتر مسئول خرید مدیر سیستم اطلاع یابد (در همان لحظه)