تور لحظه آخری
امروز : چهارشنبه ، 12 اردیبهشت 1403    احادیث و روایات:  امام صادق (ع):هرگاه مؤمن به برادر [دينى] خود تهمت بزند، ايمان در قلب او از ميان مى‏رود، همچنان ...
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

بلومبارد

تبلیغات متنی

تریدینگ ویو

خرید اکانت اسپاتیفای

کاشت ابرو

لمینت دندان

ونداد کولر

لیست قیمت گوشی شیائومی

صرافی ارکی چنج

صرافی rkchange

دانلود سریال سووشون

دانلود فیلم

ناب مووی

تعمیر گیربکس اتوماتیک

دیزل ژنراتور موتور سازان

سرور اختصاصی ایران

سایت ایمالز

تور دبی

سایبان ماشین

جملات زیبا

دزدگیر منزل

ماربل شیت

تشریفات روناک

آموزش آرایشگری رایگان

طراحی سایت تهران سایت

آموزشگاه زبان

اجاره سند در شیراز

ترازوی آزمایشگاهی

رنگ استخری

فروش اقساطی کوییک

راهبند تبریز

ترازوی آزمایشگاهی

قطعات لیفتراک

وکیل تبریز

خرید اجاق گاز رومیزی

آموزش ارز دیجیتال در تهران

شاپیفای چیست

فروش اقساطی ایران خودرو

واردات از چین

قیمت نردبان تاشو

وکیل کرج

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

پراپ تریدینگ معتبر ایرانی

نهال گردو

صنعت نواز

پیچ و مهره

خرید اکانت اسپاتیفای

صنعت نواز

لوله پلی اتیلن

کرم ضد آفتاب لاکچری کوین SPF50

دانلود آهنگ

طراحی کاتالوگ فوری

واردات از چین

اجاره کولر

دفتر شکرگزاری

تسکین فوری درد بواسیر

دانلود کتاب صوتی

تعمیرات مک بوک

قیمت فرش

خرید سی پی ارزان

خرید تجهیزات دندانپزشکی اقساطی

خانه انزلی

تجهیزات ایمنی

رنگ استخری

 






آمار وبسایت

 تعداد کل بازدیدها : 1799198850




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

ارسال دستور به کلاینت


واضح آرشیو وب فارسی:سایت ریسک: Payman_6231-08-2009, 04:31 AMسلام. برنامه ای نوشتم که 2 قسمت داره. یعنی کلاینت سروریه. من میخوام نسخه ای که روی سرور sql نصب شده به کلاینت دستور خاصی بفرسته تا بعدش کلاینت عمل خاصی انجام بده و مقداری رو از دیتابیس بخونه. پروتوکول namepipe چطوره برای برقراری ارتباط؟ لطفا راهنمایی کنید. MTPROG31-08-2009, 09:29 AMمن میخوام نسخه ای که روی سرور sql نصب شده به کلاینت دستور خاصی بفرسته تا بعدش کلاینت عمل خاصی انجام بده و مقداری رو از دیتابیس بخونه. من برای رفع این شکل یک جدول کنترلی به دیتابیس اضافه کردم و دستورات لازم رو طبق الگوریتمی ارسال میکردم و کلاینتها اونو میخوندند و اجرا میکردند مثال: فرض کنید مدیر سیستم قصد اجرای بخشی به نام اصلاح بانک اطلاعاتی در برنامه رو داره که ایرادات سندی و ثبتی رو برطرف میکنه در هنگام اجرای این بخش نباید هیچ عملیاتی رو بانک از طریق کلاینتها انجام بشه. مدیر سیستم این تقتضا رو در جدول کنترلی ثبت میکنه(مثلا فیلد LockDatabase رو برابر Trueقرار میده). کلاینتها قبل از انجام هر عملی که روی بانک تاثیر میذاره این فیلد رو چک میکنن اگه True بود از انجام عمل منصرف میشن در غیر اینصورت کارشون رو انجام میدن. یه نمونه دیگه : فرض کنید مدیر سیستم میخواد کلاینت شماره 5 گزارش فروش خودشو بررسی کنه . کلاینتها باید دارای Thread هایی باشند که وضعیت فیلدهای کنترلی مخصوصی رو بررسی کنن .جهت این کار کلاینت جدول دستورات رو نگاه میکنه اگر ID اون کلاینت توی جدول موجود بود فیلد دستور رو نگاه میکنه.و اون دستور رو طبق الگوریتمی که شما از قبل برای آماده کردید انجام میده Payman_6231-08-2009, 03:28 PMسلام. نه این روش حرفه ای نیست. چون من بلافاصله بعد از اعمال تغییرات باید به کلاینت مورد نظر بگم دیتابیس رو بخونه. اگه بخوام بذارم که خودشون بخونن باید هر ثانیه به سرور وصل شن و اطلاعات رو بخونن. حالا فرض 200 تا کلاینت داریم. نمیشه که 200 تا کلاینت هر ثانیه سرور رو بخونن. به سرور فشار میاد. من میخوام زمانی که لازمه به کلاینت مورد نظر بگم دیتابیس رو بخون. MTPROG01-09-2009, 09:25 AMحالا فرض 200 تا کلاینت داریم. نمیشه که 200 تا کلاینت هر ثانیه سرور رو بخونن. به سرور فشار میاد من این کار رو برای 20 کلاینت انجام دادم هیچ مشکلی وجود نداشت بالاخره سرور برای این کارهای سنگین طراحی شده در ضمن چون در درخواستها در در حد یک فیلد ساده است زیاد فشار نمیاد البته یه راه دیگه هم هست میشه از Socket Programing هم استفاده کرد مثل یک برنامه چت با داشتن ای پی یا نام کلاینت میتونید دستورات رو بصورت متن یا فایل به کلاینت بفرستیدو کلاینت اونو بخونه تو این روش دیگه تقاضاها به سرور نمیره و هروقت لازم بود سرور اطلاعاتشو به کلاینتها میفرسته کلاینتها میتونن یک خط فرمان داشته باشن و وقتی پیغامی از طرف سرور اومد اونو انجام بدن تازه میشه کلاینتها با هم ارتباط هم داشته باشن این رو ش بصورت لحظه ای انجام میشه یعنی هر وقت نیاز بود سرور دستور میفرسته و هر وقت دستور رسید کلاینت کار انجام میده تر کیبی از بانک اطلاعلتی و Socket Programing شاید به قول شما این روش حرفه ای تر باشه! _H2_01-09-2009, 02:18 PMسلام چون سوال جالب بود، میخواستم زودتر جواب دهم ولی پیدا کردن لینکها و دستورات مربوطه یک کم حال داشتن میخواهد! ===== برای یک ارتباط دوسویه کامل میتوانید مستقیماً از سوکت ها استفاده کنید. حتماً این pdf درپیت من را دیده اید! 276352 ===== من نمیدانم مورد شما چیست ولی شاید کلاس System.Data.SqlClient.SqlDependency کمکتان کند و بتوانید از سرویس Notifications Service استفاده کنید که با کمک Broker Service کار میکند. به عنوان مثال شما میتوانید دستور TSQL-SELECT ای مشخص کنید و سپس در صورتی که در سرور دستوری اجرا شد که نتیجه اش تغییر محتویات دیداری SELECT شما باشد، مطلع شوید و مثلاً نمایه شبه گرایدی برنامه را به روز کنید. برای این امر دو کلاس در دات نت داریم که گمانم استفاده از System.Data.SqlClient.SqlDependency ساده تر باشد. مرجع MSDN کلاس مذکور: msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx فعال سازی قابلیت مذکور با بیشترین هماهنگی و کمترین مشکل در آینده در SQLServer و دیتابیس مربوطه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! (تست نکردم ولی گمانم سرویس مذکور روی express وجود نداشته باشد، اما اگر هم نباشد احتمال زیادی دارد جزء advanced های express دانلود و نصب شود.) شرایط دستور TSQL-SELECT (هر SELECT ای مجاز نیست): msdn.microsoft.com/en-us/library/ms181122.aspx نمونه کد: msdn.microsoft.com/en-us/library/a 52dhwx7.aspx موفق باشید. Payman_6201-09-2009, 05:15 PMسلام. من این کار رو برای 20 کلاینت انجام دادم هیچ مشکلی وجود نداشت بالاخره سرور برای این کارهای سنگین طراحی شده در ضمن چون در درخواستها در در حد یک فیلد ساده است زیاد فشار نمیاد چرا دیگه فشار میاد. هم به کلاینت ها هم به سرور. 200 تا کلاینت یا بیشتر بخوان هر ثانیه سرور رو بخونن. چون بلافاصله بعد تغییر باید خونده شه. البته یه راه دیگه هم هست میشه از Socket Programing هم استفاده کرد سلام برای یک ارتباط دوسویه کامل میتوانید مستقیماً از سوکت ها استفاده کنید. بله ابتدا با توجه به آشنایی که به برنامه نویسی شبکه دارم میخواستم از این روش استفاده کنم. ولی باز کردن پورت مشکلات خودش رو داره. فایروال گیر میده و دردسر های بعدش. اینه که ترجیح میدم از سوکت پروگرمینگ استفاده نکنم. یا حداقل راه آخر باشه. من نمیدانم مورد شما چیست ولی شاید کلاس System.Data.SqlClient.SqlDependency کمکتان کند و بتوانید از سرویس Notifications Service استفاده کنید که با کمک Broker Service کار میکند. به عنوان مثال شما میتوانید دستور TSQL-SELECT ای مشخص کنید و سپس در صورتی که در سرور دستوری اجرا شد که نتیجه اش تغییر محتویات دیداری SELECT شما باشد، مطلع شوید و مثلاً نمایه شبه گرایدی برنامه را به روز کنید. برای این امر دو کلاس در دات نت داریم که گمانم استفاده از System.Data.SqlClient.SqlDependency ساده تر باشد. مرجع MSDN کلاس مذکور: msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx فعال سازی قابلیت مذکور با بیشترین هماهنگی و کمترین مشکل در آینده در SQLServer و دیتابیس مربوطه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! (تست نکردم ولی گمانم سرویس مذکور روی express وجود نداشته باشد، اما اگر هم نباشد احتمال زیادی دارد جزء advanced های express دانلود و نصب شود.) شرایط دستور TSQL-SELECT (هر SELECT ای مجاز نیست): msdn.microsoft.com/en-us/library/ms181122.aspx نمونه کد: msdn.microsoft.com/en-us/library/a 52dhwx7.aspx موفق باشید. من میخوام کلاینت از تغییر مطلع بشه. فکر نمیکنم این روشی که شما فرمودین کلاینت رو با خبر کنه. ببینید من میخوام بلافاصله بعد از تغییر محتویات یه رکورد مربوط به یکی از کلاینت ها توسط خود سرور, سرور اون کلاینت رو خبر کنه تا اطلاعات جدید رو بخونه و اون اطلاعات تو خود کلاینت هم به روز شه. منطقی هم نیست تایمر بذارم و هر ثانیه از سرور Select کنم. ناشیانه ترین راه اینه. راه بهتر سوکت پروگرمینگ هست که باز مشکلات خودش رو داره. یه راه دیگه میشه پیشنهاد کرد به این صورت که 2 تا فیلد برای این کار در نظر بگیرم. بعد از اعمال تغییرات توسط سرور فیلد جدید آپدیت بشه ولی فیلد قدیمی محتویات قبلی رو که هنوز رو کلاینت هست رو نگه داره. بعد از این که بعدا کلاینت اطلاعات جدید رو خوند به سرور اطلاع میده و اون فیلد قدیمی هم مقدارش با فیلد جدید یکی میشه. ولی این روش هم یه فیلد اضافی به دیتابیس تحمیل میکنه. _H2_01-09-2009, 05:37 PMسلام ببینید من میخوام بلافاصله بعد از تغییر محتویات یه رکورد مربوط به یکی از کلاینت ها توسط خود سرور, سرور اون کلاینت رو خبر کنه تا اطلاعات جدید رو بخونه و اون اطلاعات تو خود کلاینت هم به روز شه. دقیقاً مورد کاربرد همین مثالی زدم را توضیح دادید! SQLServer برای مدیریت صنعتی بانک های اطلاعاتی طراحی شده. این همه SQLServer بیچاره را هم دست کم نگیرید! :31: تست کنید و کمی از قدرت و امکانات قریب مانده SQLServer لذت ببرید. :31: Payman_6201-09-2009, 11:43 PMسلام. لینک msdn رو دیدم. جالبه. همون چیزیه که میخوام. شما خودت این کلاس رو تست کردی؟ پیغام بلافاصله میرسه؟ نمونه سورس داری از این کار؟ _H2_02-09-2009, 12:55 AMسلام شما خودت این کلاس رو تست کردی؟ پیغام بلافاصله میرسه؟ نمونه سورس داری از این کار؟ بله تست کردم. ===== من اختلاف زمانی خاصی مشاهده نکردم ... ولی بحرحال امکان دارد در یک برنامه شبکه با توجه به تعداد درخواست و تراکنش و ترافیک شبکه تعداد کلاینت منتظر پیام و... اختلاف زمانی رخ دهد، وجود اختلاف زمانی برای شبکه امری منطقی و قابل تصور است ولی نکته ای که وجود دارد ان است که من بعید میدانم اگر این کار را با روش و الگوریتم های دیگری انجام دهید بتوانید به بازدهی و سرعت بیشتری از سرویس آماده مذکور که مخصوص این امر طراحی شده برسید. ===== نمونه سورس کد هم دقیقاً اگر شما سورس های همین صفحه زیر را در یک برنامه کپی کنید، کار خواهد کرد. msdn.microsoft.com/en-us/library/a 52dhwx7.aspx یعنی کد اضافه ای نمیخواهد. سمپل فوق گفته یک grid و list و label روی فرم قرار دهید ولی قرار دادن یک listbox هم کافی است. اگر sqlserver2008 داشته باشید میتوانم همین کدها را برنامه کنم و برایتان بگذارم. (چون mdf های رایانه من در sqlserver2005 بازنخواهد شد.) اگر خودتان هم خواستید فقط به محدودیت های SQL دقت کنید: msdn.microsoft.com/en-us/library/ms181122.aspx مثلاً این SQL با دو بند مفاد فوق مغایر است و مجاز نیست: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! ولی این یکی صحیح است: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! البته دستور TSQL ای را که دادم را هم فقط یکبار در دیتابیستان اجرا کنید. تست کنید اگر مشکلی داشتید میتوان سمپلی هم بگذارم (با شرط ss2008) MTPROG02-09-2009, 09:36 AMتست کنید اگر مشکلی داشتید میتوان سمپلی هم بگذارم (با شرط ss2008) لطفا جهت تکمیل شدن بحث Sample هم بزارید ممنون Payman_6202-09-2009, 07:53 PMسلام. لینک مثال رو دیدم و برنامه هارو ساختم. ولی دیتابیس AdventureWorks رو تو sql نداشتم. دانلودش کردم. broker رو هم فعال کردم. ولی ظاهرا دیتابیسش تفاوتی داشت و مشکل پیش اومد. یه ورژن دیگه از این دیتابیس پیدا کردم حجمش بالاست. باید شب دانلود کنم. sql 2008 دارم. واسه مثال مشکلی نداره. _H2_02-09-2009, 11:46 PMسلام دیتابیس مهم نیست، یک چیز یک جدوله هم کافی است. یک سمپل حاضر میکنم و به زودی میگذارم. Payman_6203-09-2009, 03:03 AMسلام. دیتابیسش رو دانلود کردم. برنامه کار میکنه. دارم پیغام دادنش رو تست میکنم. نتیجه رو اعلام میکنم. ------------------------- همه قسمت هاش کار میکنه به جز پیغام رسونش. تغییرات لازم در دیتابیس رو هم اعمال کردم. سرویس خاصی لازمه قبلش ران بشه؟ یا تغییر خاصی در تنظیمات خود sql نیازه؟ _H2_03-09-2009, 05:51 AMسلام بحرحال من یک نمونه نسبتاً کامل حاضر کردم. - برنامه فعلی اول سعی میکند با ConnectionString پیشفرض خودش به سرور وصل شود و اگر نتوانست دیالوگی برای پرسش ConnectionString باز میکند. - برنامه تشخیص میدهد که دیتابیس اش Attach شده یا خیر و در صورت لزوم دکمه های Attach و Detach را فعال میکند. برنامه 4 دکمه دارد. Attach برای الحاق دیتابیس به سرور. Detach برای جداکردن فایل دیتابیس (بهتر است آخر که کارتان با برنامه تمام شد یکبار اجرا کنید تا فایلهای دیتابیس آزاد شوند و راحت بتوانید Delete کنید.) Start برای شروع عملیات مورد بحث تاپیک Sample Insert که با دستورات ایزوله و جداگانه یک سطر در جدول نصب میکند و میبیند که برنامه متوجه این تغییر میشود. (اگر هم باور ندارید(!) و شک دارید میتوانید محتویات جدول مربوطه را با یک برنامه دیگر تغییر دهید! مثلاً از خود SSMS استفاده کنید.) ===== یک کارهایی کردم و برنامه فعلی با SQLServer2005 و 2008 کار میکند و مشکلی با هیچ کدام ندارد. نمونه exe را میتوانید در شاخه bin پیدا و اجرا کنید. خلاصه مشکل خاصی ندارد و با این برای نمونه و آزمایشی است ولی کد نویسی نسبتاً کاملی دارد. ===== من برنامه را در دو سیستم جداگانه با sqlexpress تست کردم. اولی فقط sqlexpress داشت و برنامه error نداد ولی کار هم نکرد. دومی sqlexpress و develop رویش نصب بود و من فقط از sqlexpress استفاده کردم ولی کار کرد! (یعنی سرویس مذکور که با develop نصب شده روی express هم جواب داده) ===== دانلود مستقیم به حجم نیم مگا بایت: support.h02.ir/fwlink/?LinkId=1006235907 یا h02.ir/Downloads/?familyid=DB 4A 8806-4A 06-4E72-A 03E-D 2CD 74438339 موفق باشید. Payman_6203-09-2009, 05:32 PMسلام. برای من کار نکرد. من sql 2008 و دات نت 2008 رو وین 7 32 بیتی استفاده میکنم. حتی با یه برنامه دیگه تو جدول دیتابیس مورد نظر رکورد ثبت کردم. ولی باز اتفاقی نیفتاد. اجازه ثبت رکورد هم off بود که on کردم. اینم عکس ورژن sql. http://forum.p30world.com/attachment.php?attachmentid=26029&stc=1&d=1251982773 http://forum.p30world.com/attachment.php?attachmentid=26030&stc=1&d=1251982773 _H2_03-09-2009, 07:14 PMسلام SSMS که مهم نیست و ارزشی ندارد. شما میتوانید از SSMS-Express هم با هر نسخه ای استفاده کنید. شما باید ورژن خود SQLServer را چک کنید. مثلاً دستور زیر را اجرا کنید: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! که مثلاً برای من چنین جواب داد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! ولی بحرحال باید کار میکرد. یعنی حتی با دکمه Sample Insert خود برنامه هم چیزی نشان نداد؟؟!! من سعی میکنیم برخی تنظیمات و آپشن های SQLSERVER خودتان را دستکاری کنم و ببینم برنامه فوق برای ما از کار می افتد یا نه؟ (تا ببینم آپشنی تاثیر گذار است یا نه) Payman_6204-09-2009, 07:03 PMسلام. نه کلید خود برنامه هم کار نکرد. اینم ورژن: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! _H2_05-09-2009, 06:38 PMسلام بالاخره دیروز win7 را نصب کردم (بد نیست فقط یک ساعتی باید با تنظیماتش ور رفت تا دلخواه شود!) متاسفانه برای من هم که اخرین نسخه win7 و sqlserver را نصب کردم، و UAC را غیر فعال کردم و برنامه در مسیر آزادی کپی کردم و RunAsAdmin کردم، سرویس مذکور کار نکرد! خوشبختانه حالا که در رایانه من هم کار نکرده میتوانم بررسی و تحقیقی کنم و نتیجتاً میتوانم تست هم کنم... حدس میزنم مشکل از پارامترهای امنیتی win7 باشد. اگر مشکل سرویس مذکور را در Win7 را یافتم در همین تاپیک اطلاع میدهم. _H2_11-09-2009, 01:24 AMسلام من متاسفانه موفق نشدم مشکل مذکور را در W7 حل کنم. برنامه تا Vista خوب کار کرد ولی هر چه قدر هم پارامترهای امنیتی را دستکاری کردم در W7 فایده نداشت. خیلی سریع هم روی مطلب فوق در گوگل سرچی کردم ولی چیزی نیافتم. بهرحال همچین قابلیتی وجود دارد و یا مشکل از من است که نمیدانم چه تنظیماتی در Win7 لازم دارد و یا یک باگ داخلی است. (مثل Recent های VS که انگار افراد دیگری هم مشکل داشتند و مایکروسافت هم گفتهدارد حلش میکند!) فعلاً گمان نمیکنم بتوانم کمک بیشتری کنم و بحث را ادامه دهم. موفق باشید. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 2363]

bt

اضافه شدن مطلب/حذف مطلب




-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن