PDA

View Full Version : اتصال به دیتابیس لوکال در صورت برقرار نشدن ارتباط به سرور



Asad.Safari
جمعه 12 تیر 1388, 08:44 صبح
با سلام

دوستانی که در این مورد کار کرده اند لطف بکنند و یه توضیحی بدند ... آیا یه همچین چیزی ممکنه که اگر سرور در دسترس نبود , کلاینت داده ها رو دیتابیس لوکال خودش بنویسه و در اولین کانکت اون داده ها رو به سرور بفرسته ؟!؟!

مگر در این حالت یکپارچگی داده به هم نمی خورد ؟ چگونه میشه در این حالت Concurrency زو کنترل کرد ؟ و....

اگر این موارد ممکن است لطفا در مورد نحوه پیاده سازی یه توضیح مختصری بدین ...


موفق باشید

Saeed_m_Farid
شنبه 13 تیر 1388, 09:54 صبح
با سلام

دوستانی که در این مورد کار کرده اند لطف بکنند و یه توضیحی بدند ... آیا یه همچین چیزی ممکنه که اگر سرور در دسترس نبود , کلاینت داده ها رو دیتابیس لوکال خودش بنویسه و در اولین کانکت اون داده ها رو به سرور بفرسته ؟!؟!

مگر در این حالت یکپارچگی داده به هم نمی خورد ؟ چگونه میشه در این حالت Concurrency زو کنترل کرد ؟ و....

اگر این موارد ممکن است لطفا در مورد نحوه پیاده سازی یه توضیح مختصری بدین ...


موفق باشید
سلام
قبلش بگم که این پست شاید دقیقاً اون چیزی نباشه که مدنظر شماست، یعنی حتماً یه روش استاندارد باید وجود داشته باشه که من هم پیدا نکردم، ولی به هرصورت با این اختلالات گسترده شبکه همیشه باید یه راهکار گریزی واسه این مورد وجود داشته باشه.

مشکل مورد نظر رو من مجبور شدم به این صورت حل کنم :


در اولین فراخوانی وب سرویس برای هر thread تو کلاینت، یه وب متد تست برای hand shaking با وب سرویسم گذاشتم که در صورت برقرار نشدن ارتباط روال برنامه سمت کلاینت برای دریافت اطلاعات ادامه پیدا میکنه و اطلاعات کاربر با درنظر گرفتن ساعت و تاریخ، تو یه دیتابیس محلی ذخیره میشه و فقط در انتها این موضوع به کاربر اطلاع داده میشه که تاخیری تا زمان حل مشکل شبکه ممکنه تو درخواست شما پیش بیاد ...
حالا اولین بار که یه thread تونست موفق به ارتباط با وب سرویس بشه، من تمام رکوردهایی که تو دیتابیس local وجود دارن رو برداشته و تو یه صف قرار میدم و برای هر کدوم یه thread بصورت پشت صحنه با یه تاخیر عمدی که وب سرورم رو نخوابونه، ایجاد میکنم و روالهای عملیاتی (از جمله درگیر با دیتابیس) وب سرویس رو برای رکورد موردنظر با در نظر گرفتن یه فلگ که نشان دهنده زمان و تاریخ عملیات برای رکورد مورد نظر هست، انجام میدم.
به این صورت هم مطمئن میشم که رکورد روال طبیعی خودش رو طی کرده و هم زمان و تاریخ و همزمانی دیتابیس اصلی بهم نمیخوره.
اینم بگم که دیتابیس اصلی اوراکل و محلی Sql-serevr هست که طبیعتاً کلاینت از هیچکدوم اطلاع نداره و فقط با وب متد ها طرف هست.

امیدوارم کمکی کرده باشم.