Monday, December 06, 2010

تجربة الحج 2010 ونصائح للحج فى السنين المقبلة

الحمد للة الذى اذن لى بالحج هذا العام 2010 والحج هو فعلا رحلة تغير مجرى الحياة وتصلح الانسان. وقد احسست فعليا بالتغير اثناء وبعد الحج. يمكن للحج ان يجعلك لا تخشى شيئا وتعلم علم اليقين ان اللة موجود ويستجيب الدعاء. ويملا قلبك حب اللة ورغبة اكيدة فى معرفة المزيد عنة. سوف يؤثر فيك ان تكون من بين هؤلاء الذين اختارهم اللة ليأذن لهم بالحج.

فعلا ترك الحج اثرا جميلا واحساسا رقيقا فى قلبى بعظمة اللة ورحمتة وحبة لنا وكرمة الغير محدود. وقد كانت تجربة روحانية عظيمة لم ينغصها على الا قوانين المملكة العربية السعودية كبلد ووزارة الحج كهيئة منظمة للحج.
كان الحجاج دائمو الشكوى من طريقة ادارة المملكة للحج ورايت بنفسى واحسست ان طريقة ادارة المملكة للحج قد تكون سببا فى افساد الحج ذاتة على الحجاج.
قد يذهب البعض الى حد الاعتقاد ان المملكة تحارب الحج وتكره على الحجاج ان يقوموا بة وذلك بوضع العراقيل امامهم لجعل الحج رحلة صعبة عليهم وافسادة على اكبر قدر منهم.
قد تعانى من البيروقراطية اثناء الحج الى درجة تجعلك تجادل او تغضب غضبا شديدا تفقد بسببة الحج الذى اتيت من اجلة. قد تفقد الروحانيات المصاحبة للحج وتجعلك العراقيل تغادر المملكة بدون اتمام الحج. وكم ادهشنى ان اشاهد فى التليفزيون التقارير السعودية بان الحج هذا العام سهلا وميسرا فى حين اعيش الحقيقة والتى هى عكس ذلك تماما والتى هى اقرب ما يكون الى الصعب بل والمستحيل.

لذا قررت ان اكتب تجربة الحج التى مررت بها حتى يستطيع من يقرأها ان يتجنب ان يقع فيما وقعت انا فية او على اقل تقدير يكون متوقعا لما سوف يلاقية فيستعد له نفسيا. اردت ان اكتب التجربة واملى ان يقرئها المسؤلون عن الحج فى المملكة ويعلمون كيف يصف احد الحجاج ما لاقاة ويتجهون الى حل هذه المشكلات او الاستعانة ببعض الاقتراحات التى سوف اكتبها.

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

بدات المعانة من مطار جدة وذلك عندما تم عزلنا فى صالة تسمى صالة الحجاج لفحص شهادات التطعيم. استغرق الفحص 45 دقيقة وكان يتم بشكل عشوائى وذلك بان قامت مجموعة من الاطباء بالتجول بيننا ونحن جالسون والتحقق من شهادة التطعيم وكانو يجوبون بيننا بشكل عشوائى لا يضمن ان كل واحد مننا قد تم التحقق من شهادتة. كنت انظر الى تلك العملية واتسائل الم تتحقق السفارة السعودية فى الولايات
المتحدة مسبقا من شهادة التطعيم هذه . الم تكن هذه الشهادة هى احد الاوراق المطلوبة لاصدار فيزة الحج هذه؟




. اوليس حصولى على فيزة الحج بمثابة دليل على انى امتلك شهادة التطعيم ؟ لماذا اذا تضييع ال 45 دقيقة علينا وهل التاكد بهذا الشكل العشوائى لهة معنى اساسا. اذا ارادت المملكة ان تتاكد مرة اخرى اليس من الافضل والاصح ان يتم هذا العمل لكل حاج اثناء ختم الجوازات حيث يوجد طبيب بجانب ضابط الجوازات يتاكد من التطعيم لكل حاج اثناء فحص الضابط للجوازات وبذلك يكون التحقق الثانى من التطعيم منظم ويضمن ان التاكد قد تم لكل حاج؟ اذا ادهشك ذلك الامر فستدهش اكثر حين يطلبون منك التقدم لظابط الجوازات. وعندها سوف تجد مجموعة من الظباط يضحكون فيما بينهم وتحس منهم التباطؤ فى العمل وعدم الاهتمام بك والتحدث فيما بينهم بشكل مستمر عن امور شخصية من داخل كبائنهم التى يجلسون فيها وستلاحظ انهم لا يهتمون بعملهم الذى يؤدونة وهو فحص الجواز وختمة والسماح لك بالدخول فكانت هذه العملية بطيئة جدا ومما زاد الطين بلة انهم امروا الحجاج بعمل 4 طوابير امام 4 كبائن. وكان حظى فى كابينة ليس بداخلها ضابط, فطبعا كانت كل الطوابير تتحرك الا طابورنا نحن ومما اثار الدهشة ان هناك ضابط واقف مهمتة انك تلتزم بطابورك ولا تغادرة الى طابور اخر حتى وان كان طابورك ليس لدية ضابط جوازات. وقفنا فى هذا الطابور الذى لا يتحرك لمدة 25 دقيقة حتى رائينا فوج اخر من الحجاج قد وصل ووقتها جاء ضابط الى طابورنا وكان هو الطابور الوحيد المتكدس الان وباقى الطوابير فارغة. فقام احد الضباط بتوزيعنا على الثلاث كبائن الاخرى وكانت الاجراءات عبارة عن اخذ صورة لك ثم بصماتك ثم ختم الباسبور. ولما حدث التكدث نصح احد الضباط زميلة بعدم عمل البصمات لان طابورة قد اصبح طويلا. اليس من الاصح ان يتوفر عدد كبير من الضباط استعدادا لاستقبال الاعداد الهائلة التى ستصل الى المملكة. واليس من الواجب ان يؤدى كل ضابط عملة بهمة وجدية؟

اما اصعب شيئ ستواجههة هو الشيك. هذا الشيك وحدة اخذ 4 ساعات من الوقوف والانتظار والبيروقراطية. ما هى قصة هذا الشيك فى الصورة.




قصة الشيك هى ان السفارة السعودية فى الولايات المتحدة تطلب منك شيك بمبلغ 275 دولار لاصدار فيزة الحج. هذا الشيك هو نظير الخيام والتنقلات باتوبيسات المملكة اثناء الحج. ولكن السفاره لا تصرف الشيك. هم فقط يتحققون من الشيك ويكتبون كلمة "دقق"علية والتى تفيد ان الشيك شيك مقبول لديهم ويعيدونة اليك مرة اخرى ويطلبون منك ان تسلمة الى الموظف فى مطار جدة. الكارثة ان الموظف فى مطار جدة يرفض الشيك ويخبرك ان هذا الشيك لا يمكن صرفة وانة غير مقبول لديهم وان عليك ان تدفع المبلغ نقدا بالعملة السعودية. كان الشيك الخاص بى صادر من بنك تشيس وهو اكبر بنك فى العالم ومع ذلك اخبرنى الموظف انهم لن يقبلوة وحتى بعد ان اوضحت لة ان السفارة اشرت بكلمة دقق اخبرنى بانهم لن يقبلوة ويجب ان ادفع نقدا وان كل الحجاج ترفض شيكاتهم ويدفعون المبلغ نقدا والا لن يستطيعون مغادرة المطار. طبعا كان على وعلى كل الحجاج ان نوافق وبالفعل طلبوا منع اتباع شخص معين والذى سوف ياتى معى لاتمام اجراءات الدفع الكاش. اخذت الاجراءات 4 ساعات من ضمنهم ساعة لا يعرف احد اين جواز السفر الخاص بى. تبدا الاجراءات بزيارة قسم الكمبيوتر ثم الاستاذ عبد اللة ثم التسجيل ثم الكمبيوتر مرة اخرى. فى قسم الكمبيوتر اخبرونا ان نبشر ونستبشر وننتظر بالاسفل لمدة ساعة. وسوف نجد الباسبور جاهز لندفع المبلغ. انتظرت ساعة ولم يات الباسبور ذهبت الى قسم الكمبيوتر قالو بعثنا الباسبور ذهبت الى الموظف قال لم يات الباسبور لم يكم هناك اى احتمال اخر سوى ان الباسبور فى الطريق. انتظرت ساعة اخرى ثم طلبت مقابلة المدير لان لا احد يعلم اين باسبورى. اخبرنى المدير ان الباسبور لن ياتى هنا ولكن سوف يذهب مباشرة الى المبنى رقم 3 واشار الى كيف اصل الى هذا المبنى ذهبت الى المبنى وبالفعل كان باسبورى هناك ولا يعلم ذلك الا هذا المدير. اعطونى الباسبور ووصل لادفع المبلغ فى الخازينة. فى الخازينة طلبو منى الذهاب الى مكتب الصرافة لتغيير عملة والعودة مرة اخرى للدفع. غيرت العملة ودفعت وحصلت على وصل يفيد انى دفعت.
طلبوا منى الرجوع مرة اخرى الى الموظف المسؤل عن الاوتوبيسات ليعطينى هذا الملصق الدائم على الباسبور والذى يفيد انى دفعت وذلك بدل الوصل الذى يفيد انى دفعت.






اربع ساعات من المشى من مكتب الى مكتب وانا بملابس الاحرام. لا اطوف حول الكعبة ولا اصلى فى الحرم ولا اسعى بين الصفا والمروة ولا حتى اشرب ماء زمزم. 4 ساعات من المعاناة . 4 ساعات كان يمكن ان اؤدى عمرة ولكن ضيعتها علينا المملكة بالروتين والخطوات وزيارة المكاتب التى لا تعنى شيئا. اليس من الاصح ان تقبل السفارة فى الولايات المتحدة الشيك وترسل المبالغ الى السعودية بدلا من بهدلة الحاج. اليس باللة عليكم. هل ياتى الحاج ليذوق تجربة التنقل من مكتب الى مكتب. هل هذا يفيد الحاج. هل هل هل هل. هل يسمعنى احد فى المملكة. هل هذه هى السعودية التى تعلن فى التليفزيون ان الحج كان سهلا وميسرا. بماذا نصف هذا. فعلا لا ادرى ماذا اقول ولكن كان هذا اصعب شئ على وعلى زملائى وشيئ مؤسف جدا جدا جدا

ثم كان لى حظ لاذوق استهتار الموظفين وهى قصة الاستكر. فهم يعطون كل حاج ستكر. هذا الاستكر يصنف الحاج حسب الدولة القادم منها. فمثلا القادمون من امريكا واوروبا وتركيا لهم استكر يفيد ذلك. وبموجب هذا الاستكر يعرف الحاج اى خيام سيبيت فيها. يوجد استكر اخر لافريقيا وعند الحصول على ملصق افريقيا سوف تجد نفسك دائما مع القادمون من افريقيا. كان حظى السيء ان تكلمت مع الموظف باللغة العربية وبالرغم من ان باسبورى كندى واننى قادم من الولايات المتحدة وفيزتى صادرة من الولايات المتحدة الا ان الموظف افترض نظرا لانى اتحدث العربية معة بطلاقة انى قادم من افريقيا وقام بلصق الاستكر الافريقي على باسبورى. وعند اتمام الاجراءات لاحظ احد الموظفين اننى يجب ان احصل على استكر امريكا واخبرنى بالرجوع الى الموظف الاول وتغيير الاستكر فقمت بعمل ذلك. كان لى صديق اخر يدعى اسامة حصل ايضا على الاستكر الخاطئ لانة يتحدث العربية ولم يتنبة لذلك احد الا بعد 5 ساعات وذلك قبل ركوبة الاتوبيس المتجة الى مكة. اليس من الافضل وضع هذا الاستكر بمعرفة السفارة حين اصدار الفيزا. او جعلة جزءا من الفيزا اذا كان ولابد من هذا الاستكر.





ثم استمرت رحلتى مع الاستهتار داخل مطار جدة وذلك حينما طلبو منى التوجة الى الاوتوبيسات للركوب للذهاب الى مكة. كان هناك نوعين من الاوتوبيسات اوتوبيس جماعى واوتوبيس فردى. طبعا انا فردى لانى جاى لوحدى ولكن كل السعوديين المسئولين يريدوننى ان اركب مع مجموعة. اشرح لهم ان ليس لي مجموعة وبالرغم من ذلك يطلبون منى الانتظار الى ان يجدو لى مجموعة ولا يفهمونى ولا يدلونى على اوتوبيس الفرادى. شاهد موضوعى احد عمال النظافة وهو مصرى وشاهد انتظارى بالساعات فجاء الى وقال لى سوف اقول لك ماذا تفعل ولكن انتظر بعد مغادرة هذا الرجل السعودى علشان ما يضرنيش. وبالفعل غادر السعودى فقال لى عامل النظافة اذهب الى هذا الموقف الذى امامك اسمة فرادى (ج) وسوف تتحرك الى مكة فى 5 دقائق. وبالفعل ذهبت الى الموقف وركبت وتحرك الباص فى 20 دقيقة الى مكة وكان هذا هو اسرع انجاز تم فى مطار جدة بالنسبة لى بسبب خبرة عامل النظافة وحسبى اللة ونعم الوكيل فى هذا العذاب الذى تحملتة بلا داعى فى مطار جدة. والتعب والارهاق الذى اصابنى من جراء الاستهتار وعدم الجدية وخبرة الموظفين او المتطوعين فى المطار. اليس حريا بالمملكة تدريب العاملين تدريبا جيدا على عملهم وان كان فيهم متطوعين اليس من الواجب تدريبهم جيدا. اذا افتقرت المملكة الى متطوعين جادين اليس من الاجدى اعطاء الفرصة لاشخاص اخرين حتى وان لم يكونو سعوديين اذا توفرت فيهم الجدية والقدرة على مساعدة الحجاج. كيف يساعدنى عامل نظافة ويعقدنى موظف او متطوع منوط بمسؤلية ركوبى الباص كيف يفهمنى عامل نظافة ويفشل فى ذلك المسؤل؟

الاوتوبيس كان قصة اخرى. الاوتوبيس يظهر علية القدم والاهمال وبدون تكييف. وقال لى سائق الاوتوبيس انة يعمل هو وزميلة 24 ساعة وينامون فى الاوتوبيس. المهم انطلق الاوتوبيس فى شوارع جدة متجها الى مكة فى شوارع رديئة ورخيصة ليس بها خدمات طبعا لا يمكن مقارنتها بشوارع امريكا. وكنت توقعت ان ارى شوارع السعودية على مستوى عالى من التكنولوجيا والهندسة ولكنى وجدتها مثل شوارع مصر تماما. بعد 10 دقائق استوقفتنا الشرطة لمدة نصف ساعة لتتاكد اننا حجاج رغم اننا قادمين من طريق المطار ولا يمكن ان يدخل هذا الطريق اى احد غير من هو قادم من المطار من صالة الحج. اليس من الممكن تخصيص هذا الطريق للخارجين من صالة الحج والغاء هذا الموقف للشرطة؟وصل الباص الى مكان يدعى التفويج وذلك بعد ساعة كاملة وانتظرنا هناك ساعة اخرى وذلك كى يتم اخبار السائق بالاماكن التى يجب ان يذهب اليها للمطوف وكان المطوف المنوط بى هو مطوف 36. المطوف هو الشخص الذى سوف يستلم باسبورك وياخذك الى الفندق. عند وقوفنا فى التفويج اعطونا ماء زمزم ووجبة عشاء وكانت لفتة جميلة جعلتنى اتفائل خير باللى جاى.
وصلت الى المطوف بعد ساعة اخرى استقبلنى احد الموظفين لدية فاعطانى طعام وانتظرت ساعة لياتى باص صغير ياخذنى الى الفندق وواجهت استهتار اخر وهو ان الموظف اخذنى الى فندق معفن يدعى الرحابة المكية وبعيد عن الحرم. فقلت لة هل هذا هو الفندق الذى سوف ابقى فية قال نعم. قلت ولكن شركة السياحة اخبرتنى اننى سوف اقيم فى فندق 5 نجوم امام الحرم يدعى فندق الصفوة. وهذا الفندق ليس لة اى نجوم بل هو تقريبا بنسيون وليس قريبا من الحرم بل هو فى مدينة اخرى ويدعى الرحابة المكية. قال لى هذا هو الفندق. طلبت منة الاتصال بشركة السياحة لان هذا لايمكن ان يكون الفندق فاتصل بشخص اخر بدل شركة السياحة ثم قال لى هذا هو الفندق فصممت على ان يتصل بشركة السياحة واخيرا اتصل بمديرة شركة السياحة فقالت لة ان هذا ليس الفندق وان علية التوجة بى الى فندق الصفوة امام الحرم (فيديو 1 2 3 ). اخيرا اقتنع ولكن قال لى انة لا يعلم اين هو. المهم قلت لة انة امام الحرم فقال للسائق يذهب الى الحرم وهناك نسأل.
ذهبنا فى نصف ساعة وسألنا ووجدنا الفندق ودخلت الغرفة وانا فى غاية التعب والارهاق. استغرق هذا الامر منذ هبوط الطائرة فى مطار جدة الى دخولى الغرفة 12 ساعة. وجدت فى الغرفة شخص سوف يقيم معى استغرق نفس الموضوع معة 24 ساعة ومر بمما مررت انا بة من الشيك الى الاستكر الى الاوتوبيس الى الفندق الخطاء وحسبنا اللة ونعم الوكيل فعلا والحمد للة على اننا حافظنا على الهدوء والسكينة وتجنبنا الجدال. اليس من الاجدر بالمطوفين وموظفيهم معرفة اماكن الفنادق والتاكد من الفندق الذى سينزل بة كل حاج؟ اليس من الضرورى ان تهتم المملكة بالحجاج بدلا من وضع الصعاب والعراقيل امامهم لافساد حجهم وتضييع وقتهم وتشوية صورة الاسلام والمسلمين.


ذهبت فورا وانا فى غاية الانهاك والتعب الى الحرم لابدأ العمرة. ذهبت الى الطواف ورأيت الكعبة بيت اللة الاول لاول مرة فى حياتى وانتابنى شعور جميل لروئية البيت الذى عظمة اللة وشعرت فعلا انى ضيف عند اللة. قمت بالطواف ثم الصلاة فى مقام ابراهيم ثم شرب ماء زمزم ثم السعى والتقصير. واتممت العمرة والحمد للة وانا فى غاية التعب. ثم صعدت الى الغرفة لخلع ملابس الاحرام والتى اتسخت فى مطار جدة والرحلة من المطوف الى الفندق الى الانتظار فى التفويج الى الى الى ...... اكثر مما حدث لها اثناء العمرة.

بعد ان انتهيت من العمرة صعدت الى الفندق ونمت متعبا جدا. سعيد بأداء العمرة ولكن فى غاية التعب والارهاق وكم كنت اتمنى ان يكون لدى بعض القوة لاقرأ بعضا من القران او الذهاب لعمل عمرة اخرى او البقاء فى الحرم والنظر لاول بيت وضع للناس او انتظر لصلاة الفجر فى الحرم ولكن كان التعب شديدا فعلا.

فى اليوم التالى نزلت استفسر من اين يمكننى الذهاب الى التنعيم للقيام بعمرة اخرى واذا بى افاجأ بان مكة تعتبر فعلا مدينة فقيرة ماديا وحضاريا بكل اسف. فالاوتوبيسات فى الشارع بلا مواقف ولا نظام. الشوارع تشبة العتبة فى مصر. هل تعمل المملكة على جعل هذا المكان الذى يزورة البلايين يظهر بمظهر جيد ام لا تهتم على الاطلاق. هل هذا هو مستوى الحب لاطهر مكان على وجة الارض؟ هذا فعلا غير مقبول. ما رائيت جعلنى اعرف فعلا ان المسلمين حقا متاخرين.

قضيت فى مكة 6 ايام بدون مشاكل حيث انى انزل للصلاة فى اوقاتها وليس لدى اى مشكلة كانو 6 ايام فى منتهى الروعة والجمال (فيديو 1 2 3 ) ثم كان يجب علينا السفر الى المدينة لزيارة المسجد النبوى فاتجهنا الى المطار. وفى المطار تحس انك فى مطار بنجلاديش او السودان او افقر دولة فى العالم. بشر على الارض وناس بتتخانق. وحين تسال احد الاشخاص كم لك من وقت منتظر هنا يقول لك 24 ساعة اخرين ، يقولون 16 ساعة وهكذا. لايوجد نظام ولا تنظيم حياة سبهللا وزعيق وخناقات على كل حاجة الشنط ، الحجز ، المواعيد ، الدخول الخروج.... كل حاجة.

بعد تجربة تعب بسيطة ماتستاهلش ذكرها لانها تعتبر عادية مقارنة باللى شفناة قبل كدة وصلنا المدينة. ونزلنا بفندق اسمة هارمونى وذهبنا الى المسجد النبوى الجميل وقضينا 4 ايام من زيارة قبر الرسول محمد صلى اللة علية وسلم واكرمنا اللة بالصلاة فى الروضة كذا مرة وزيارة الاماكن التاريخية والاماكن المقدسة مثل غار حراء (فيديو 1 2 3 4 5 )وبعد 4 ايام توجب علينا العودة الى مكة لبدأ مناسك الحج.


ارسلت لنا وزارة الحج اوتوبيس مكتوب علية اوتوبيس مدارس لنقل الطالبات. ليس بة تكييف فى هذا الحر الشديد وليس بة ايضا اماكن لحقائبنا نظرا لانة اوتوبيس مدارس. ونظرا لاننا لسنا طلبة فشنطنا ليست شنط طلبة بل هى شنط مسافرين. رفضنا فى الاول الركوب لاننا ممكن نفطس وايضا عندما راى السائق شنطنا قال انة لن ياخذ الشنط وان الشنط يجب ان نشحنها على حسابنا فى اى وسيلة اخرى.
ودة طبعا غير ان الاوتوبيس بدلا من ان ياتى الساعة 2 ظهرا جة الساعه 7 مساءا. تدخلت مندوبة شركة السياحة واشتكت للوزارة فاخبروها ان هذا هو الموجود اذا كان عاجبكم. فشرحت لنا الموقف وفى الاخير اضطررنا للركوب كما اضطر السائق الى قبول حقائبنا ووضعناها على كراسى الاوتوبيس لان الاوتوبيس ليس بة مكان للحقائب. وبدات رحلة العذاب التى استغرقت 16 ساعة من المدينة الى مكة فى طرق تعبانة رخيصة الثمن وزحام شديد جدا. هذه الرحلة التى كان يجب ان تستغرق 4 ساعات فقط.
ووصل الباص الى التفويج ثم ذهبنا الى فندق فى مدينة العزيزية وضعنا بة الشنط وبدانا الاستعداد للحج والذى اصبح غدا بدايتة.

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

للمبيت هناك اخبرتنا شركة السياحة انهم ذاهبون للحصول على الاوتوبيس والرجوع لنا. ذهبوا الى المطوف للحصول على التصريح ثم الى الجراج للحصول على الاوتوبيس. انتظروا فى الجراج من الساعة 8 مساءا الى 7 صباح اليوم التالى للحصول على اوتوبيسهم. المهم اتى الاوتوبيس ومعة سائق ومرشد. المرشد هو شخص خبير بطرق مكة يوفرة المطوف ويعرف ايضا اماكن الخيام الخاصة بمطوفة . المرشد الذى حصلنا علية هو هذا الباشا الكبير قوى اللى فى الصورة.

بعد ان ركب الحجاج طلبت شركة السياحة من هذا المرشد اخذنا الى الخيام المخصصة للمطوف الذى يعمل معة واذا بالطامة الكبرى. هذا المرشد الخبير لا يعرف اين مكان الخيام ولا منى ولا طرق مكة. وكمان طور اللة فى برسيمة والمشكلة انة ما بيقولش معرفش. ذهبنا الى مكان الخيام ولكن هيهات هيهات. مررنا بجميع الخيام فى عز زحمة المرور ولم يعرف بسلامتة خيامنا وطبعا من المستحيل النزول والسؤال وكان هذا الموقف فعلا يدعوا الى الغضب الشديد فقامت شركة السياحة بالاشارة للسائق بالذهاب فورا الى المطوف. قام السائق باخذنا الى المطوف ووصلنا بيننا العجائز والمرضى انا نفسى كدت انفجر ولكنى كظمت غيظى جدا. لماذا يعطينا المطوف شخص لايمكنة ارشادنا الى اماكن الخيام. لماذا الاستهتار لماذا تعرضوا الحاج لاحتمال ان يجادل او يغضب. فعلا هذا غير مقبول كنت احدث نفسى قائلا ان المملكة تدمر الحج ولا يمكن لاى شخص او حكومة ان يكون بهذا الاستهتار وقلة الامانة فى هذا الموقف. وقتها اتضح لى ان مشقة الحج الحقيقية هى فى التعامل مع القائمين على الحج ومع النظام الذى وضعتة المملكة بدون وعى وبدون تخطيط ولا حتى استعداد حقيقيين والذى يعرض الحاج لفقدان حجة ومالة بل ويعرضة لاكتساب ذنوب بدلا من مساعدتة على عمل اعمال يجزى بها.
تتسبب هذه التصرفات فى فقد الروحانيات وتاخذ الحاج الى اتجاة اخر وعالم اخر حيث تستفذ غضبة وتدفعة الى الاحساس بالظلم والاهمال وعدم الامانة. انا كحاج تسائلت اكثر من مرة هلى هؤلاء مسلمين؟ هل هذه الحكومة مسلمة. هل المطوفين والمسئولين مسلمين؟
على اى حال قام المطوف بعدما راى الحجاج امامة باستبدال الباص طبعا لان الباص حالتة مزرية واعطانا المساعد الخاص بة لياخذنا الى الخيام ونحن فى غاية الضيق نحاول ان نكظم غيظنا ونتسغفر ونسبح ونحافظ على حجنا ولا نجادل مع احد ولا نشتكى وحسبنا اللة ونعم الوكيل.

ذهبنا الى منى للمبيت ثم صلينا الفجر وتوجهنا الى عرفات( فيديوا 1 2 )ثم الى المزدلفة
وكان يوم المزدلفة هو يوم المذبحة البشرية بمعنى الكلمة. وعدد كبير من الحجاج قد فقد حجة فى هذا اليوم بعد الخناقات على الاوتوبيسات والتدافع الشديد وعدم النظام. الذى لا يتصورة عقل. يوجد فى المزدلفة ما يقرب من 3 مليون شخص وتاتى الاوتوبيسات لنقلهم بشكل عشوائى بدون ادنى تنظيم. اى حد بيركب فى اى اوتوبيس ومافيش بنى ادم بيقولوهم على حاجة ولا بينظمهم مافيش تواجد امنى ولا نظامى لاى مسئول هرجلة. انا رئيت بعينى اوتوبيس نصفة فارغ والادهى ان سائق الباص قرر انة يطلع نص حمولة فى هذا الموقف الرهيب بدلا من ان يملأ الاوتوبيس ورافض رفضا تاما ان يفتح الباب. ولا حتى ينظر الى الناس الواقفين فى الشارع الذين يطلبون منة فتح الباب وفى الاخير وجدت شيخ الجامع الذى معنا والذى هو قدوة يخبط على باب الاوتوبيس ويهدد السائق بان يفتح الباب ولا حياة لمن تنادى. وبالاخير اضطر الى فتح الباب لاننا لم نتركة يستمر فى القيادة.
اشعرنى هذا الموقف ان القائمين على الحج ليس لديهم ادنى فكرة عن قدراتهم ولا عن عدد الحجاج ولا عن قدرة طرقهم ولا اى شئ. استهتار وتخلف للاسف وبدائية تدعوا للغضب.

رجعنا الى منى وبعد كل هذا التعب والمشقة يتوجب علينا الذهاب الى الجمرات لالقاء جمرة العقبة. 3 مليون حاج يمشون 4 كيلو بدون اى تنظيم وفى الحر الشديد. كل ما فعلتة المملكة انها اغلقت الطريق امام السيارات حتى يستطيع الحجاج المشى. كنت اتوقع ان ارى سيور متحركة لتساعد الحجاج على هذه ال4 كيلو ولكن طبعا تبخل المملكة على الحج بمثل هذه الافكار.
ان المشى الى الجمرات فعلا يعرض الحياة للخطر ويعظم المشقة التى يتعرض لها الحجاج. وصلنا لجمرة العقبة والقيناها وطبعا تهنا عند الرجوع لان العلامات فى المنطقة غير موجودة فلا تعلم اين انت ولا كيف تعود من حيث اتيت. لا يوجد تنظيم بالمرة تجربة صعبة جدا جدا جدا . المهم عدنا الى الخيام وذهبنا فى اليوم التالى لالقاء الجمرات والقاء الجمرات بالرغم من كل التعديلات التى فعلتها المملكة فى السابق الا انة لايزال خطر. فان الناس لايعلمون ماذا يفعلون بعد القاء الجمرات. بعد القاء الجمرات يخرجون عن طريق دفع الناس مما يعرض اكثرهم للوقوع على الارض. او يلقون الحصى على بعضهم البعض بدون وعى او يخبطك واحد فى وشك وهو بيرمى وهكذا. كم كنت اتمنى ان تضع الوزارة علامات ارشادية تخبر الحاج كيف يلقى الجمرات وكيف يخرج. فان انسب الوسائل فى القاء الجمرات ان يلقى الجمرات ويستمر فى السير ولا يخرج من مكانة لانة سوف يجد نفسة قد خرج فعلا اذا استمر فى السير فى طريقة ولا داعى للتدافع. كل المطلوب هو علامات ارشادية ولوحات مكتوب عليها باللغات الرئيسية مع بعض الرسومات كيفية الدخول والخروج ويا حبذا لو كانت هذه اللوحات اثناء السير من الخيام الى الجمرات.

بعد القاء الجمرات فى اليوم التالى واذا كنت من المتعجلين يتوجب عليك الذهاب الى مكة لعمل طواف الافاضة والوداع ثم التوجة الى جدة. للسفر.

لتذهب الى مكة فى هذا اليوم سوف تجد انة ليس امامك غير المشى او لو كنت من المحظوظين تركب موتوسيكل. لم كن من المحظوظين فمشيت الى مكة فى ساعتين. طواف الافاضة والوداع والسعى بين الصفا والمروة هايكون صعب جدا من المستحيلات لدرجة اثناء الطواف كان دعائى هو يارب قوينى لاتمام الطواف. تعب شديد جدا جدا جدا فوق الاحتمال. ومرة اخرى لا تدرى الناس كيف يخرجون من الطواف فيتدافعون للخروج وكنت اتمنى تعليمهم كيف يخرجون تدريجيا بدلا من التدافع كم كنت اتمنى ان يعطينى الفندق ورقة تخبرنى بانسب طريقة للخروج بعد انتهاء الطواف او وضع علامات ورسومات تخبر الحجاج كيفية الخروج. بعد ان اتممت الطواف قمت بالسعى بين الصفا والمروة. وبعد كام شوط بتنسى مين هوا الصفا ومين هوة المروة ولا يمكن تلاقى يافطة واحدة تقولك فين الصفا وفين المروة تقوم تسال الحجاج. واحد يقولك دة الصفا والتانى يقولك لا دا المروة. هو ماينفعش المملكة ووزارة الحج يحطوا يافطة واضحة عند الصفا وواحدة عند المروة؟ ما علينا بعد السعى كان يجب على العودة سريعا لاخذ حقائبى والتوجة لجدة ومرة اخرى اصطدم بالفقر فى مكة . فلا يوجد مواصلات . لا يوجد غير استغلال حيث عرض على سائق سيارة نصف نقل ان ياخذنى الى العزيزية مقابل 400 ريال طبعا مضطر توافق ولكن بعد ان انتظرت 10 دقائق لم ينطلق لانة يريد اكثر من راكب. نزلت وكنت محظوظا لارى موتوسيكل وافق على نقلى الى العزيزية مقابل 150 ريال. وصلت اخذت حقائبى واتجهت الى جدة احمد اللة على اتمام الحج وعندى سعادة شديدة بان الحج تم بنجاح ونسيت كل ما حدث واصبح كل الذى مريت بة ذكرى اخشى ان اقول انها ذكرى جميلة. اصبح تاخير الباص والمرشد الذى لايعلم اين الخيام والتاخر فى مطار جدة والشيك الذى لم يقبلوة مواقف اضحك منها واتذكرها العمر كلة ولكننى فعلا اريد للمسلمين ان يكونوا متقدمين. والحج هو اعظم مناسبة لذلك والحج هو اعظم فرصة ليعلم العالم عننا اذا نظمنا الحج واصبح الحج مناسبة راقية جدا من حيث النظام فسوف نكون فعلا تقدمنا فى شئ.

اتمنى ان يستفيد حجاج السنة المقبلة من هذه الموضوع كما اتمنى ان يصل ما كتبت للمسؤلين عن الحج فى المملكة ويعلمون انهم السبب فى معاناة وكارثة فيقومون بصرف المال على دراسة سريعه لحل المشكلات التى اوردتها. ونصيحتى لهم الاستعانة بغير السعوديين والاستعانة باشخاص مشهود لهم بالكفاءة والسرعة وليس الجهل والبيروقراطية. اتمنى ان تكون هناك فائدة من هذه الموضوع الذى كتبتة ولا اريد بة سوى اللة وارجو منك ان كان لديك تعليق ان تضيفة لاستفيد منة ويستفيد من يقرا هذه المقال. وشكرا.

Thursday, October 28, 2010

Webfarm and Servername

If your WCf service is hosted with a commercial hosting provider which may or many not be using a web farm, you may find that when you browse to your service that it shows a different address for the svcutil.exe than the dns address and when you download the wsdl/svcutil that this wsdl/svcutil is referencing the internal server name instead of your domain name.

For example, if you purchased a domain name called aliayman.com and your hosting company is storing and hosting your files on an internal server called HostingCompanyServer01. Now let's imagine you created a web service called MyService.svc.

Now when you browse to http://aliayman.com/MyService.svc

you will see your service information but you will notice the line that contain the svcutil.exe is telling you to get the wsdl from

svcutil.exe http://HostingCompanyServer01/Myservice.svc

this is a problem because you can not access this server name, you can access aliayman.com but you can not access this specific host name.

Also, when you try to reference this service in your code you will find that your reference is pointing to HostingCompanyServer01 instead of aliayman.com

You have to solutions to this problem.

Solution 1: after you create the reference search your code for HostingCompanyServer01 and change it to aliayman.com and at least your program will be able to deal with the web service. You will find HostingCompanyServer01 in *.wsdl and *.svcinfo files.

Solution 2: which is the best solution is to change the binding of the IIS installed on HostingCompanyServer01. This is off course if you have access to this IIS. to view the binding find your site identifier number (let's assume it is 1) and issue these commands to view your binding. (notice your site identifier 1 is used before ServerBinding and SecureBinding below)

cscript.exe //nologo %systemdrive%\inetpub\adminscripts\adsutil.vbs get W3SVC/1/ServerBindings

cscript.exe //nologo %systemdrive%\inetpub\adminscripts\adsutil.vbs get W3SVC/1/SecureBindings

then issue these commands to correct the binding

cscript.exe //nologo %systemdrive%\inetpub\adminscripts\adsutil.vbs set W3SVC/1/ServerBindings "80:aliayman.com"

cscript.exe //nologo %systemdrive%\inetpub\adminscripts\adsutil.vbs set W3SVC/1/SecureBindings "443:aliayman.com"

Then restart your application pool

I found these advices about the binding in this blog post

Wednesday, October 13, 2010

WCF over Https and User Name/Password

Web services are mandatory nowadays and for a long time security has been a tough thing to do. Now with WCF you can just configure wsHttpBinding and you're done with a great deal of security. This binding will encrypt the communication between the web service and the client, however the client should be able to do the same encryption and decryption that the service understands. Hence, your client should be a .Net client which may not always the case. You may have a Java Client which will not be able to perform wsHttpBinding, or you may have a .Net client but you want to send Ajax requests to your WCF service which again Javascript will not be able to perform wsHttpBinding because you need a .Net to do it and .Net is not available to Javascript. At the end of the day you may find that wsHttpBinding is not that great if you are not totally in a Microsoft world.

In order to have your web service available to the entire world, including Ajax and Java then you will need to make your service available under https protocol. This way you guarantee the entire world can talk to your service securely and the parameters you are sending to the web service operations are encrypted by the client automatically and decrypted by the service. Also, the service response is encrypted for you automatically using the standards public/private key strong encryption and decrypted by the client automatically.

In order to enable SSL for your WCF follow the steps outlined in this article.

1- Get SSL Certificate: You will need to purchase and configure an SSL certificate for your domain name. You can buy it from VeriSign starting from $99 or you can generate your own by installing Windows 2003 Certificate Authority then request a certificate for your machine and issue it from that certificate authority. If you use your own certificate issued by certificate authority you will encounter a trust issue and you may need to write one line of code to avoid this trust issue. If you encounter this trust issue you will get the message "The remote certificate is invalid according to the validation procedure", you can avoid this message by writing this line of code

ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, X509Certificate certificate, X509Chain chain,SslPolicyErrors sslPolicyErrors) { return true; };
2- Bind IIS: You will need to make sure that your IIS is bound to your domain name. usually when you host a WCF on an IIS server IIS will always recognize the local server name and does not recognize the domain name. In order to learn about this issue and find out what to do read this article here But in a nutshell, you will need to issue two command
cscript.exe //nologo %systemdrive%\inetpub\adminscripts\adsutil.vbs set W3SVC/1/ServerBindings ":80:Your_Domain_Name"

cscript.exe //nologo %systemdrive%\inetpub\adminscripts\adsutil.vbs set W3SVC/1/SecureBindings ":443:Your_Domain_Name"

3- Enable Secure Metadata: Then for the service metadata set httpsGetEnabled="True" in your service config more info.
<>

Check listing 7 here

4- Set Binding Security Mode: Define binding properties for basicHttpBinding as per Listing 8 here

5- Attach Binding configuration to EndPoint: Add this binding configuration to the service end point as per listing 9 here

6- Set Mex endpoint to mexHttpsBinding: As per listing 9 here

7- Set the baseAddress: You can set the base address optionally as per listing 9 here

You WCF Service is now secure and you can browse to it as follows.

When you try to call your service you should see the following in fiddler. one connection on port 443 and the entire communication is encrypted.


8- Require Secure Channel: Now, using IIS go to the Default web site or the site that has your service and go to Directory Security, Secure Communication, Edit and click Require Secure Channel (SSL). Now your service is not available under http. It is only available under https here is how to change the setting


Now if you try to browse to the service using http you will get the error "The page must be viewed over a secure channel as per the image below


9- Automatically redirect http to https: If you want to redirect http to https you can read the information in this post or this one.

Additional References for SSL


For the user name and password: You will need to do the following

1- Send credentials at the client: In your client code make sure to send the credentials. If your client is a .Net client you can send the credentials as follows

var svc = new MySecureService.MySecureServiceClient();
var cred = new NetworkCredential("MyUserName","MyPassword");
svc.ClientCredentials = cred;
var result = svc.Operation1();

2- Implement IHttpModule: Create a class and implement System.Web.IHttpModule, you can use the following code

public class UserAuthentication : IHttpModule
{
public void Init(HttpApplication context)
{
context.AuthenticateRequest += new EventHandler(this.OnAuthenticateRequest);
context.EndRequest += new EventHandler(this.OnEndRequest);
}

public void OnAuthenticateRequest(object sender, EventArgs e)
{
var application = (HttpApplication)sender;
var header = application.Request.Headers["Authorization"];

try
{
if (!string.IsNullOrEmpty(header))
{

header = header.Trim();
if (header.IndexOf("Basic", 0) != 0)
{
throw new Exception("Access Denied.");
}

var encodedCredentials = header.Substring(6);
var decodedBytes = Convert.FromBase64String(encodedCredentials);
var s = new ASCIIEncoding().GetString(decodedBytes);
var credentials = s.Split(new char[] { ':' });
var username = credentials[0];
var password = credentials[1];

if (!ValidateUser(username, password))
{
throw new Exception("Access Denied.");
}
}
else
{
throw new Exception("Access Denied.");
}
}
catch (Exception ex)
{
application.Response.StatusCode = 401;
application.Response.StatusDescription = ex.Message;
application.Response.Write("" + ex.Message + "");
application.Response.End();
}
}

public void OnEndRequest(object sender, EventArgs e)
{
if (HttpContext.Current.Response.StatusCode == 401)
{
var context = HttpContext.Current;
context.Response.StatusCode = 401;
context.Response.AddHeader("WWW-Authenticate", "Basic Realm");
}
}

public void Dispose()
{

}

private bool ValidateUser(string username, string password)
{

// Insert Custom User Validation here

var validUsername = "MyUserName";
var validPassword = "MyPassword";

if (username == validUsername &&
password == validPassword)
{
return true;
}
else
{
return false;
}
}
}

3- Add Module to your web.config: In the modules section add this module in your web.config as follows

< name="UserAuthentication" type="MyNameSpace.UserAuthentication">



Thursday, September 09, 2010

Sand Castle in two minutes

In order to generate documentation using sand castle here is what is needed

1- Install SandCastle 2.6 from here
2- Install SandCastle Help File Builder here
3- Make sure you have Microsoft help compiler 1.x here

Once you have the above, start the SandCastle Help File Builder, add your XML documentation and references and build your chm. if you want to build a website (which is MSDN like) just choose website in the HelpFile Format

Friday, August 27, 2010

Tic Tac Toe Algorithm

If you are given a Tic Tac Toe board. How do you find if a specific player is a winner.

The straight forward algorithm is going to start from the first row and the first column. the algorithm will start by checking if this square is an X or if it is an O.
assume we are trying to find if X is the winner.

If this square is an X, then we will increment the number of X's found in row 1 and the number of X's found in column 1 and the number of X's found in the 270 degrees diagonal.

Because this first row and first column square is a member of all these three possibilities. in order to support this algorithm then we need a storage that will hold the number of X's found in Row 1, the number of X's found in row 2, the number of X's found in row 3, the number of X's found in column 1. the number of X's found in column 2. the number of X's found in column 3. the number of X's found in the 270 degrees diagonal and finally the number of X's found in 45 degrees diagonal.

We can create a class called Tic Tac Toe as follows.

class TicTacToe
{
private readonly int[] _rows; //array to store the number of X's found in each row
private readonly int[] _cols; //array to store the number of X's found in each column
private int _270Diagonal; //one variable to store the number of X's found in the 270 degrees diagonal
private int _45Diagonal;//one variable to store the number of X's found in the 45 degrees diagonal

private readonly int _boardSize; //Caching the board size
private readonly int _boardSizeMinusOne; //cashing the board size minus one in order to perform the subtraction only once

public TicTacToe(int boardSize) // constructor will set the rows and columns array sizes, cash the board size and calculate the boardsize - 1
{
_rows = new int[boardSize];
_cols = new int[boardSize];
_boardSize = boardSize;
_boardSizeMinusOne = _boardSize - 1;
}

//Function to add a Square taken by player X and return true if X won due to this addition
public bool AddSquare(int row, int col)
{
if (_rows[row] == _boardSizeMinusOne) return true; //Since X exist in this row, check if there were two more (or board -1). if so, adding this X will make X take all the squares in this row and hence win
_rows[row] += 1; //otherwise increase the number of X's in this row

if (_cols[col] == _boardSizeMinusOne) return true;
_cols[col] += 1;


if (row == col) //this is the 270 degrees diagonal
{
if (_270Diagonal == _boardSizeMinusOne) return true;
_270Diagonal += 1;
}

if (((row + col) == _boardSizeMinusOne)) //this is the 45 degrees diagonal
{
if (_45Diagonal == _boardSizeMinusOne) return true;
_45Diagonal += 1;
}
return false; //No winner yet
}
}





This class contains the AddSquare function which will add a square taken by X and will let us know if X has won due to this addition.

This algorithm will visit every single square only in the worst case scenario and at this time the Big O will be n to the power of 2.

in order to test this class we would create a sample board and use the class as follows

static void Main(string[] args)
{
var board = new int[3,3];
board[0, 0] = 0;
board[0, 1] = 0;
board[0, 2] = 1;

board[1, 0] = 0;
board[1, 1] = 0;
board[1, 2] = 1;

board[2, 0] = 1;
board[2, 1] = 0;
board[2, 2] = 1;

var ticTacToe = new TicTacToe(3);
for(var row = 0; row != 3; row++)
{
for (var col = 0; col != 3; col++)
{
if (board[row,col] == 1)
if (ticTacToe.AddSquare(row, col))
{
Console.WriteLine("Player 1 has won the game.");
Console.ReadKey();
return;
}
}
}

Console.WriteLine("No one won");
Console.ReadKey();
}


a better algorithm could select the squares to examine more carefully and improve the worst case scenario. If we look at the board, we find that the middle square is responsible about 4 different possibilities of winning, and if this square does not contain X, then that means 4 different possibilities are eliminated. secondly the corner squares are responsible for 3 different possibilities and if a corner square does not contain X then 3 possibilities are eliminated. so, if we start with the middle square and then the corner squares the worst case scenario will indeed be improved.

Not only that, but if we can store the importance of every square and how many possibilities it is a member of, then during the examination of the board we will find that some squares will not affect the board and hence we should not check it. here is an illustration.

3

2

3

2

4

2

3

2

3

In the board above, the center square has a weight of 4, and that means it is part of 4 possibilities to win the board. the possibilities are, row 2, column 2, and the diagonals. if we check this square first and it turns out it does not contain an X, then those 4 possibilities are eliminated and the weights of the affected squares can be decreased as per the diagram below

2

1

2

1

-

1

2

1

2

in the board above, the center square is not an X and that means for example for the top left corner square, there is only two possibilities that this square can be part of. the two possibilities are row 1 and column 1, because the 270 degrees diagonal that it was part of has been eliminated.

2

1

2

1

-

1

2

1

2

Now can can go ahead and pick the square which the highest weight, in case there are more than one, we can pick anyone, let's pick the top left corner and check it. let's assume we did not find an X in it. that means row 1 and column 1 has been eliminated as follows

-

0

1

0

-

1

1

1

1


if the top left corner is not an X, then we can go ahead and reduce the weights of all the squares that can make a winning situation jointly with the top left square. in this case we will decrease 1 from the weights of all the squares in row 1, all the squares in column 1 and the 270 degrees diagonal. in this case we will notice that row 1 column 1 now has a weight of zero. and that means the value of this square does not matter, whether it is an X or an O it does not matter, because row 1 can never be a row fully occupied by X, and column 2 can never be fully occupied by X. It does not matter what the value of this square is (row 1, column 2). using this technique we will be able to prune the board and eliminate a number of squares that we do not need to check.

This will affect the Big O calculated for this board since it will not be n square. I still need to calculate how exactly it will be and I should expect to see some log n in the calculation.

I will post the C# program here soon.

Wednesday, May 26, 2010

MSMQ load balancing

Microsoft does not recommend load balancing MSMQ, the reason has to do with the level of security demanded via the RPC protocol with MSMQ. The read operation will not be able to make the connection to MSMQ and will be dropped by the receiver. There are no workarounds since this would compromise the security of the connection. However, If you are really desperate to load balance the MSMQ here is one possible architecture.

In order to perform load balancing you will need to distribute the write load among the MSMQ's you have. in order to do this you will need to use a hardware load balancer like F5-BigIp

If you have two MSMQ machines then your writer application will write half of the messages to the first MSMQ and the other half to the second MSMQ. your reader application however can not use the load balancer to do the read. since this read will be a remote read which will be stopped by RPC protocol, your reader applications should be local to the MSMQ. In the diagram below


The writer application writes to the load balancer, the load balancer distributes the messages and check the health of the MSMQ server before sending a message to it. In case one of the MSMQ servers is taken down the load balancer will only forward the traffic to the active MSMQ. which should achieve your load balance and fail-over requirement. You can also add a third or fourth MSMQ to the cluster if you encounter higher load and you want to scale your architecture up. you can also take MSMQ down and your application will not be aware since it always communicate with the load balaner.

For the read operation; Typically MSMQ reading is most efficient when done locally. Having multiple readers on each local machine would provide fault-tolerance along with higher performance. That said, you should have the reader application installed directly on the MSMQ machines. This way the reader applications are performing a local read which will not compromise the RPC security. Your reader application can then process the MSMQ message do whatever it needs to do like sending the contents in email or saving to a database or whatever it is supposed to do.

Wednesday, April 14, 2010

WCF [Global Variables] and [Caching]

WCF is stateless by nature and there is no support for global variables or caching out of the box. However, You can use Caching Application Block to create and access global variables that you might need in your WCF and also to improve performance. View this Power Point Presentation to get acquainted with Caching application block if you need to, otherwise read on.

In this article I am going to discuss how to use the Caching Application Block with WCF and I will show the details and the step by step instructions to add caching to your WCF. The diagram below is a block diagram of the pieces involved



This diagram shows a WCF service running in ASPNetCompatibilityMode. When the WCF starts it will load the cache proactively with look up data. when the look up data expire cache events will fire in order to load the new data. so let's begin.

Caching application block support two modes of caching those are "Proactive" and "Reactive".

In Proactive Caching data is loaded even before any of your WCF operations is called. This is particularly important for look up data because you want your look up data to be loaded and available to all the WCF operations at the start.

In Reactive Caching on the other hand, data is loaded into the cache via the WCF operations themselves.
To use caching application block and load data proactively you can follow the steps below.

1- Download the enterprise library from Microsoft website.
2- Create your WCF and make it support AspNetCompatibilityRequirements. (more on this here). To do so, decorate your WCF class (not the interface) with the following attribute
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

Then add this entry to your web.config inside the node system.serviceModel

3- Nowthat your WCF supports AspNetCompatibilityRequirements, then you can use global.asax. Add global.asax to your project and in the application_start load your cache.

4- Here is the code to load your cache
ICacheManager _wcfCache = CacheFactory.GetCacheManager();
_wcfCache.Add("table1", table1, CacheItemPriority.Normal, new RefreshTable1(), new ExtendedFormatTime("* * * * *"));

The first line will declare and load cache object and the second line will add an entry in the cache. This entry will be refreshed every minute using the ExtendedFormatTime expiration task
new ExtendedFormatTime("* * * * *")
and when refreshed the refresh method in a class called RefreshTable1 will be called to reload table1

The caching application block is also instrumented and that mean you can use PerfMon.exe to see how your cache is doing.


If you are new to performance counters watch this video to get your feet wet in custom counters and read this about performance counters. Here is also a sample application. The caching application block provides the following counters. Read More

Total Cache Misses - NumberOfItems64
Total Cache Hits - NumberOfItems64
Total Cache Expiries - NumberOfItems64
Total Cache Scavenged Items - NumberOfItems64
Total Cache Entries - NumberOfItems64
Total Updated Entries - NumberOfItems64
Total # of Cache Access Attempts - RawBase
Updated Entries/sec - RateOfCountsPerSecond32
Cache Scavenged Items/sec - RateOfCountsPerSecond32
Cache Expiries/sec - RateOfCountsPerSecond32
Cache Hits/sec - RateOfCountsPerSecond32
Cache Misses/sec - RateOfCountsPerSecond32
Cache Hits/sec - RateOfCountsPerSecond32
Cache Misses/sec - RateOfCountsPerSecond32
Cache Hit Ratio - RawFraction


In order to use PerfMon to see your run time cache performance you will need to use the server explorer inside your visual studio and add the keys above as displayed in the screen shots below.







After adding the instrumentation keys, you need to run PerfMon.exe and add the keys to the monitor as per the screen shots below







Then enjoy watching the performance of your cache as follows.