PDA

View Full Version : حرفه ای: ثبت تراکنش های توزیع شده



ACorvinus
جمعه 14 بهمن 1390, 08:52 صبح
سلام دوستان.

بنده میخوام n تراکنش در سایت A و m تراکنش در سایت B ثبت کنم به این شرط که اگه بعد از ثبت تراکنش های سایت A اگر مشکلی در ثبت تراکنش های سایت B رخ بده، تراکنش های سایت A هم لغو بشه.

*منظورم از سایت کامپیوتر هستن.

من این روش رو در SQL میدونم، میخوام اینو با کدنویسی اعمال کنم.

من ----> این (http://support.microsoft.com/kb/316247) <----- روش رو پیش رفتم ولی دارم از کامپوننت جانوس استفاده می کنم و به هنگام استفاده از System.Reflection.AssemblyKeyFileAttribute خطای زیر رو بهم میده. لطفا اگه راه دیگه ای میدونین بهم بگین.

متن خطا:
Unable to emit assembly: Referenced assembly 'Janus.Windows.GridEX.v3' does not have a strong name

این مشکلیه که هرکسی میتونه توش گیر کنه!!!!

Esmail Solhkhah
جمعه 14 بهمن 1390, 11:13 صبح
فایل مورد نظر ساین نشده ، اگه شانس بیاری میتونی خودت ساینش کنی

http://msdn.microsoft.com/en-us/library/xc31ft41.aspx

چون DLL مورد نظر رو خودتون ننوشتید باید اول یه فایل Key براش ایجاد کنید بعد با RE-Sign.exe ساینش کنید

البته چون DLL های جانوس به هم وابسته هستن ممکنه جواب نده

راه بهترش اینه که DLL های ساین شده جانوس رو استفاده کنید

جناب zarrinnegar (http://barnamenevis.org/member.php?31940-zarrinnegar) (مرجع جانوس سایت) رو ملاقات کنید.

موفق باشید.

zarrinnegar
جمعه 14 بهمن 1390, 16:23 عصر
میتونی درباره کاری که میخواهی انجام بدی ، یکم توضیح عملی بدی که میخواهی چیکار کنی ؟

البته من گرفتم که چی میخواهی ولی میخوام مثال عملی بزنی که کامپیوتر A و B دقیقا چیکار میکنن که اگر B با موفقیت نتونست انجام بده ، عملیات A هم کنسل بشه ؟

شاید با مثال ، راه بهتری رو بشه پیشنهاد داد

ACorvinus
جمعه 14 بهمن 1390, 19:07 عصر
میتونی درباره کاری که میخواهی انجام بدی ، یکم توضیح عملی بدی که میخواهی چیکار کنی ؟

البته من گرفتم که چی میخواهی ولی میخوام مثال عملی بزنی که کامپیوتر A و B دقیقا چیکار میکنن که اگر B با موفقیت نتونست انجام بده ، عملیات A هم کنسل بشه ؟

شاید با مثال ، راه بهتری رو بشه پیشنهاد داد

با سلام.
(بدون استفاده از وب سرویس)

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

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

حالا میخوام اگه ذخیره اطلاعاتم در انقلاب با مشکل مواجه شد، اطلاعاتی که به تهران پارس انتقال داده شده هم لغو بشه (ثبت نشه).

مهندس من این کار رو با Service Component انجام دادم (تونستم ورژن نهایی جانوس رو بدست بیارم، چون در برنامه من از کامپوننت های جانوس استفاده شده) و جواب هم گرفتم.
اگه کرک درست جانوس ورژن 3.5 رو دارین یه جورایی اگه بتونین بفرستین به ایمیل من ممنونتون می شم.


بازم اگه راه دیگه ای برای تراکنش های راه دور سرغ دارین، خوشحال میشم با یه مثال عملی توضیح بدین. یا حتی حاضرم یه تایپیک ایجاد کنیم و این کارو با هم انجام بدیم.
------------------------

هدف: یکپارچگی اطلاعات در دیتابیس های راه دور.

in_chand_nafar
جمعه 14 بهمن 1390, 21:13 عصر
این مساله به راحتی تحت SQL Server با Linked Server قابل انجام است به سایت دوست عزیزم وحید نصیری سر بزن یه مقاله خوب در مورد این موضوع گذاشته یه سناریو هم خودم داشتم که چند سال پیش این طوری حلش کردم و هنوز مشتریم داره ازش استفاده می کنه
http://www.dotnettips.info/2010/01/sql-server.html

zarrinnegar
جمعه 14 بهمن 1390, 23:19 عصر
با سلام
من لینک دوستمون رو دیدم
توی لینک مورد نظر اگر 2 تا sql شما با یک ارتباط مطمئن انجام بشه و همیشه لینک بین دو تا sql بر قرار باشه جواب میده ولی همیشه نمیشه روی ارتباط 2 نقطه راه دور مطمئن شد

شما چرا میخواهید که همزمان 2 تا sql رو Update کنید؟
هیچ جای دنیا 2 تا چیز رو باهم بروز نمیکنن چرا که همین مشکل ممکنه پیش بیاد
اول میان دیتابیس نزدیک رو بروز میکنن و بعد از موفقیت آمیز بودن ، بعدی رو بروز میکنن

من خودم از یک روش خاص استفاده میکنم که میشه هم لحظه ای دیتا رو بروز کرد و هم موقعی که تنظیم بشه مثلا هر 5 دقیقه یک بار یا هر ساعت و یا هر روز یک بار
توی این روش من یک جدول ایجاد میکنم و جدول هایی رو که میخوام اطلاعاتش به سمت دیگه فرستاده بشه رو براشون 3 تا Trigger مینویسم که توی هر کدوم میگم که اون جدول رو پر کنه

محتویات جدول چیه؟ محتویات فیلدهای تاریخ روز و ساعت و نوع عملیات ( اضافه و حذف و ویرایش ) و یک فیلد text که کل اون دستور sql رو ثبت میکنم
مثلا کالای شماره 100 با نام "موبایل نوکیا N8 " و شماره سریال "2F67GTY99JHHYh788" به رنگ مشکی در سیستم ثبت میشود و من این دستور رو توی فیلد Text ذخیره میکنم
Insert Into Anbar (Code,name,serial,color) values ("100","موبایل نوکیا N8","2F67GTY99JHHYh788","Black")
این دستور به عنوان یک متن ذخیره میشه

حالا از سرور بعدی هر از چند گاهی میام این جدول رو باز میکنم و فیلتر میکنم بر اساس اجرا نشده ها و این یکی رو نشون میده و text اون رو میخونم و اجراش میکنم
همین رکورد اونجا ثبت میشه و این رکورد رو اجرا شده میکنم که دفعه بعدی نشونم نمیده

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

ACorvinus
شنبه 15 بهمن 1390, 23:20 عصر
این مساله به راحتی تحت SQL Server با Linked Server قابل انجام است به سایت دوست عزیزم وحید نصیری سر بزن یه مقاله خوب در مورد این موضوع گذاشته یه سناریو هم خودم داشتم که چند سال پیش این طوری حلش کردم و هنوز مشتریم داره ازش استفاده می کنه
http://www.dotnettips.info/2010/01/sql-server.html

سلام.

دوست عزیز ممنونم از پاسختون ولی همون ابتدا گفتم که نمیخوام با SQL این مساله رو حل کتم والا خودم با استارت کردن سرویس Distributed Transaction Coordinator میتونستم این کارو انجام بدم. بهرحال بازم خیلی ممنونم.

ACorvinus
شنبه 15 بهمن 1390, 23:26 عصر
با سلام
من لینک دوستمون رو دیدم
توی لینک مورد نظر اگر 2 تا sql شما با یک ارتباط مطمئن انجام بشه و همیشه لینک بین دو تا sql بر قرار باشه جواب میده ولی همیشه نمیشه روی ارتباط 2 نقطه راه دور مطمئن شد

شما چرا میخواهید که همزمان 2 تا sql رو Update کنید؟
هیچ جای دنیا 2 تا چیز رو باهم بروز نمیکنن چرا که همین مشکل ممکنه پیش بیاد
اول میان دیتابیس نزدیک رو بروز میکنن و بعد از موفقیت آمیز بودن ، بعدی رو بروز میکنن

من خودم از یک روش خاص استفاده میکنم که میشه هم لحظه ای دیتا رو بروز کرد و هم موقعی که تنظیم بشه مثلا هر 5 دقیقه یک بار یا هر ساعت و یا هر روز یک بار
توی این روش من یک جدول ایجاد میکنم و جدول هایی رو که میخوام اطلاعاتش به سمت دیگه فرستاده بشه رو براشون 3 تا Trigger مینویسم که توی هر کدوم میگم که اون جدول رو پر کنه

محتویات جدول چیه؟ محتویات فیلدهای تاریخ روز و ساعت و نوع عملیات ( اضافه و حذف و ویرایش ) و یک فیلد text که کل اون دستور sql رو ثبت میکنم
مثلا کالای شماره 100 با نام "موبایل نوکیا N8 " و شماره سریال "2F67GTY99JHHYh788" به رنگ مشکی در سیستم ثبت میشود و من این دستور رو توی فیلد Text ذخیره میکنم
Insert Into Anbar (Code,name,serial,color) values ("100","موبایل نوکیا N8","2F67GTY99JHHYh788","Black")
این دستور به عنوان یک متن ذخیره میشه

حالا از سرور بعدی هر از چند گاهی میام این جدول رو باز میکنم و فیلتر میکنم بر اساس اجرا نشده ها و این یکی رو نشون میده و text اون رو میخونم و اجراش میکنم
همین رکورد اونجا ثبت میشه و این رکورد رو اجرا شده میکنم که دفعه بعدی نشونم نمیده

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

سلام دوست عزیز.

ممنونم از روش پیشنهادیتون. ولی در طراحی ای که بنده انجام دادم اطلاعات فقط و فقط با از سرور توزیع بشه.
یه سوال. شما ورژن 3.5 کامپوننت جانوس رو دارین؟ کار من گره خورده به این جانوس.

اگه کرک درست جانوس 3.5.0.40 رو پیدا کنم میتونم با Service Component مشکلم رو حل کنم.