الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الإتصال بقاعدة البيانات في التايمر أم البنج على السيرفر افضل ؟

بدأه MohamedAliSalim في 1 سبتمبر 2013 · 5 رد · 614 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي سؤال للإخوة الخبراء

الأن انا أقوم بعمل أداه تنبيه للفريق الخاص بي

وهو عبارة عن ويندوز ابلكشن مستخدم به الكنترول fileSystemWatcher

والذي من خلاله بخليه يبص على ملف معين على السيرفر بحيث اول لما يحصل اي تغيير في الملف ده الـ Event بتاع الكنترول يشتغل 

والكود يشتغل حيث عند حدوث اي تغيير في الملف بعمل إتصال بقاعدة البيانات ( بفتح بعمل سيلكت وبقفل تاني )

المشكلة هنا تكمن ان هذا الكنترول يتوقف عن العمل بمجرد إنفصال الشبكة ولو للحظة  وعودة الشبكة لا يتأثر بها

ففكرت في فكرة

اني اعمل تايمر يعمل كل 5 ثواني

التايمر ده بيعمل Ping على السيرفر اللي فيه الملف الهدف

ولو نتيجة الــ Ping ناجحة فبعمل تنشيط للكنترول المذكور اعلاه  ,, بعمله ايقاف وتشغيل تاني علشان يبدأ يبص على الملف

 

 

انا في بادئ الأمر اريد ان ابعد عن التايمر ده

ولكني إضطريت ان استعمله

السؤال هنا

 

هل الــ Ping على السيرفر كل 5 ثواني مع إيقاف وعمل الــ fileSystemWatcher  النظر الى الملف المستهدف ثم اذا تم إيجاد تغيير في المف يتم الإتصال بقاعدة البيانات أفضل أم

الإتصال بقاعدة البيانات كل 5 ثواني 

؟؟ أريد من الخبراء الرد

Mohamed Ali Salim

0.1..0...4....7.....6......2.......7........4.........8

#2

ولو لم افتهم الغرض ولكن عندي اقتراح

تعمل صفحة ب asp

لماذا asp ؟لان الكومبايلر بيعمل في السيرفر

مااللذي ستفعله الصفحة ؟التاثير على الداتابيس كما يفعل برنامجك مثلا كلما حدث تغيير للملف قم بخزن الساعة وip  والبروسر واسم اليوسر في جدول داخل الداتا ويمكنك الاستفادة من هذا الجدول لعمل منبهات عند تشغيل البرنامج

 

اقتراح اخر عمل بروسيس خاص يعمل منفصل وعلى دوام على الداتا بيس

 

وان لم تستفد من الاقتراحين يرجى توضيح الغرض لان يمكن ان يعالج ب اكثر من طريقة برمجية غير طريقتك

وضح اكثر او قسم من الكود يفي بلغرض وشكرا

#3

مشكور  zaraki_kenpache

على المشاركة

 

اوضحك بالضبط ماذا اريد ان افعل

 

نحن في قسم البرمجة عاملين web site اسمه TaskManager

وهو من خلاله يستطيع الـTeam leader بإرسال المهام للمبرمجين الذي يقودهم

ويبدأ المبرمج بالدخول على هذا الموقع ومشاهدة المهام المطلوبة منه ويضع وقت العمل في المهمة والإنتهاء منها حتى يستطيع في الأخر ان يقوم الـ Team leader بإستخراج التقارير الخاصة به عن كل مبرمج

 

ينقص هذا الموقع أداه لتنبيه المبرمج بأن هناك مهام جديدة له

عندما يقوم الـ Team leader  بإرسال مهمة لأحد المبرمجين اريد ان تظهر للمبرمج المستهدف تنبيه بوجود مهمة جديدة  , يظهر التنبيه اسفل يمين الشاشة " من ناحية ساعة الويندوز" مثل رسالة تنبيه الياهوو عند حصولك على بريد جديد , او مثل الأنتي فيرس عندما يطلب عمل Update

 

وهذا لا يشترط فتحه للموقع TaskManager

ولهذا السبب أريده ان يكون ويندوز ابلكشن

 

هلا وضح الأمر ؟؟

Mohamed Ali Salim

0.1..0...4....7.....6......2.......7........4.........8

#4

,والدخول اليوسر عن طريق بروسر او برنامج سي شارب؟

 

وان كنتم جميعا تستعملون visual studio.net  يمكن استعمال team project وهو يتميز بما تريدون واكثر فقط تحتاجون سيرفر

 

ولكن اظن بان الحل هو ان يكون لديك حقل في جدول المهام وهو عبارة عن string يحتوي على 3 قيم ،القيمة الافتراضية unread وايضا read و modified واذا كانت unread فيجب اعلام اليوسر بان لديه مهمة جديدة مع الوصول الى المهمة وعند فتح المهمة تتغيير القيمة الى read وهنا يجب الا تظهر لليوسر مرة اخرى وهذه التنبه سوف تعرض بعد انعاش اللذي تعمله يدويا كما تفعل اغلبة البريدات كياهوو وجيميل وبرامج الحماية عند تشغيل الحاسب اي عند فتح برنامجك واذا اردت تنبيه فوري فيجب عمل بروسيس يعمل باستمرار وسوف تحتاج الى System.Threading; وايضا الى System.Runtime.InteropServices وربما ايضا ربما تحتاج الى تحويل خصائص البرنامج الى Allow unsafe code

 

وهي التي سوف تعمل لك delegate وايضا Invoke

ما هو delegate and invok ؟

عندما تستخدم بروسيس منفصل عن البرنامج او thread لايمكن الوصول الى الادوات لان البرنامج في حالة التشغيل مثلا لديك ليست بوكس تعرض التنبيهات وقد صنعت بروسيس لكي يستمع Listen الى التنبيهات وعند وجود تنبيه فوري لا يستطيع عرضه على الليست بوكس لانه شغال حاليا فيجب استعمال delegate and invok لكي تستطيع اضافة items ال listbox

وهذا مثال بسيط

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public delegate void US(string S, string S2, bool b, string s3);
        public void UseString(string S, string S2, bool b, string s3)
        {
            listBox1.Items.Add(S);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Invoke(new US(UseString), new Object[] { s, s2, true, s3 });
        }
    }

وايضا بالنسبة ل team project  ابحث في غوغل او

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

http://www.youtube.com/watch?v=mVKYgr-QOow

وشكرا

تم تعديل هذه المشاركة بواسطة zaraki_kenpache في 2 سبتمبر 2013 في 20:43

#5

 

اقتباس

 

 فيجب عمل بروسيس يعمل باستمرار

 

هذا هو محل السؤال

البرنامج الذي سيعمل باستمرار هل الأفضل في التايمر عمل الاتصال بقاعدة البيانات والتأكد من وجود مهام جديدة

أم الأفضل الاتصال بالجهاز عن طريق ملف في شيرد فولدر يتم الكتابة فيه من الموقع؟

Mohamed Ali Salim

0.1..0...4....7.....6......2.......7........4.........8

#6

لا يحتاج الى تايمر لانه يعمل باستمرار فقط تحتاجالة ManualResetEvent وجعلها الانتضار قليلا حسب تسلسل عمل الكود hEvent.WaitOne(); ووهذا الكود فيه كل ما تحتاج

ملاحضة عليك عمل الكونكشن بين القاعدة وقراة المهام حسب ماتريد ولا اتوقع لديك مشكلة في ذلك

وهذا هو الكود

using System;
using System.IO;
using System.Threading;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;



namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        bool first = true;//in load if not problem
        private void button1_Click(object sender, EventArgs e)//just for start you can start in any event
        {
            if (first)
            {//Thread programThread;

                programThread = new Thread(new ThreadStart(loadadap));
                programThread.Start();
            }
            else
            {
                //programThread.Resume(); //use ir if you not have error
                first = true;
            }
        }
        public delegate void US(string S);
        public void UseString(string S)
        {
            listBox1.Items.Add(S);
        }


        unsafe void loadadap()//in WindowsformApplication in bulder chang it to allow unsafe code dont forget
        {
            try
            {
                if (yourCondition)
                {
                    ManualResetEvent hEvent = new ManualResetEvent(false);
                    //your work to connedt to db and make how make alarm with sql code
                    while (true)
                    {
                        connect_to_db();//with ur connection string and read the informatio from job tabel if the field =unread or.....
                        //sting alarm=reder[];

                        hEvent.WaitOne();//this is enaph without timer

                        
                        listBox3.Invoke(new US(UseString), new Object[] { s});
                        hEvent.Reset();

                    }
                }

                else

                    MessageBox.Show("if have any problem.");
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        
    }
}

وشكرا

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…