سرويسهاي
هشداردهي
سرويسهاي هشداردهي[1] ابتدا در
سال 2002 به عنوان يك download
وب براي SQL
Server 2000 معرفي شدند. در SQL Server 2005، سرويسهاي هشداردهي به عنوان زير سيستمي جديد به محصول پايه
اضافه شدهاند. سرويسهاي هشداردهي يك چارچوب كاري هستند كه به شما امكان ساخت
برنامههاي پيامرساني اختصاصي را ميدهند كه اين برنامهها قادر به قرار دادن
اطلاعات اختصاصي براي چندين مشترك و وسيله هستند. سرويسهاي هشداردهي توسط انواعي
از شركتهاي معروف براي تحويل اطلاعات شخصي به مشتريان آنها استفاده ميشوند. براي
نمونه، موبايل MSN از سرويسهاي هشداردهي براي ارسال اخبار خصوصي و ساير اطلاعات به
انواع وسايل موبايل استفاده ميكند. پيادهسازي سرويسهاي هشداردهي معروف ديگر در ESPN.com است كه سرويسي را فراهم كرده است كه مشتريان ميتوانند براي يافتن
نتايج مسابقات ورزشي استفاده كنند. سرويسهاي هشداردهي SQL Server 2005 به شما اجازه ميدهند تا اين انواع برنامههاي شيوه هشداردهي
يكسان را بسازيد. در حالي كه ميتوانيد برنامههاي هشداردهي را از صفر بسازيد،
سرويسهاي هشداردهي SQL Server 2005
شروعي عالي در اين نوع پروژه را با فراهم كردن يك چارچوب كاري مستحكم، مقياسپذير
و تست شده به شما ميدهند كه ميتوانيد از آنها به عنوان پايهاي براي برنامههاي
هشداردهي خود استفاده كنيد.
در اين فصل، مطالبي درباره زيرسيستم
سرويسهاي هشداردهي جديد ميآموزيد. در اولين بخش اين فصل، مروري بر اين زير سيستم
جديد خواهيد داشت. سپس، مطالبي درباره نحوه ساخت برنامههاي سرويسهاي هشداردهي ميآموزيد.
براي شروع، مروري بر فرآيند برنامهنويسي خواهيد داشت و سپس مقداري كد نمونه را ميبينيد
كه نحوه استفاده از چارچوب كاري سرويسهاي هشداردهي را براي ساخت برنامههاي شيوه
هشداردهي تشريح ميكنند.
يك برنامه سرويسهاي هشداردهي يك لايه
نرمافزاري است كه بين يك منبع اطلاعات و دريافت كننده مورد نظر آن اطلاعات قرار
دارد. برنامه سرويسهاي هشداردهي رويدادهاي از پيشتعريف شده خاص را كنترل كرده و
ميتواند بهطور هوشمند اطلاعاتي درباره اين رويدادها را براي انواع وسايل مقصد
مختلف با استفاده از يك زمانبند تحويل شخصي فيلتر كرده و مسيريابي ميكند. برنامههاي
سرويسهاي هشداردهي شامل سه جزء اصلي هستند: رويدادها، اشتراكها و هشدارها. شكل
1-5 مروري سطح بالا از يك برنامه سرويسهاي هشداردهي را فراهم ميكند.

در يك برنامه سرويسهاي هشداردهي،
رويدادها تنها چيزي هستند كه به نظر ميرسند (مواردي اتفاق ميافتد كه بايد از آنها
مطلع شويد). در مورد مثال ESPN.com،
يك رويداد ممكن است چيزي شبيه نتايج نهايي برخي رخدادهاي ورزشي باشد. براي NASDAR، يك رويداد ممكن است افزايش بها به سطح خاصي باشد. در سرويسهاي
هشداردهي SQL
Server 2005، رويدادها به
عنوان رديفهايي در يك جدول از پايگاه داده Notification
Services ذخيره ميشوند.
اشتراكها[2] نحوه بيان
كاربران يك برنامه Notification
Services به سيستم درباره
نوع رويدادهايي هستند كه در آنجا درج ميشوند. مثلاً، در مثال Notification
Services مبتني بر ورزش،
يك كاربر ممكن است اشتراكي را براي داشتن نتايج نهايي بازيهاي Los Angeles Lakers ايجاد كند. در مثال Notification Services قيمتهاي سهام، يك كاربر ممكن است اشتراكي را براي مطلع شدن ايجاد
كند، هنگامي كه قيمت سهام مايكروسافت به بيش از 50 دلار در هر اشتراك برسد. SQL Server 2005 Notification
Services اشتراكها را نظير
رويدادها به عنوان رديفهايي در يك جدول ذخيره ميكنند.
يك هشدار[3] لزوماً
پيامي است كه به كاربر نهايي ارسال خواهد شد و حاوي اطلاعات مربوط به رويدادي است
كه كاربر مشترك آن است. براي مثال در سرويسهاي هشداردهي ESPN، اين ممكن است يك پيام e-mail
باشد كه تيم دلخواه شما بر رقباي خود پيروز شده و اين نتيجه نهايي است. هشدارها ميتوانند
به فرمتهاي مختلف براي انواع وسايل مقصد مختلف تحويل شوند.
كار برنامه Notification
Services، كنترل رويدادهاي
خارجي و يافتن تطابقهايي بين رويدادها و اشتراكهاي ثبت شده است. هنگامي كه
رويدادي با اشتراكي تطابق دارد، موتور Notification Services هشداري را به كاربر نهايي ارسال ميكند. مقياسپذيري يك برنامه Notification
Services وابسته به بخش
بزرگي از نحوه تطابق رويدادها با اشتراكها توسط موتور Notification
Services است. مايكروسافت
چارچوب كاري Notification
Services مرتبط را به صورت
مقياسپذير در سطح اينترنت طراحي كرده است، بدين معني كه با محيطي مناسب، SQL Server 2005 Notification
Services ميتواند براي مديريت
ميليونها رويداد، اشتراك و هشدار رشد كند. براي انجام اين كار، Notification
Services از موتور پايگاه
داده رابطهاي بسيار كارآمد SQL Server 2005
براي الحاق رديفهايي از جدول رويدادها با رديفهاي جدول اشتراكها براي تطابق
رويدادها با اشتراكها بهره ببرند.
SQL Server 2005 Notification Services محيطي است كه طراحي شده است تا به شما امكان نوشتن و توزيع برنامههاي
هشداردهي با مقياسپذيري بالا را ميدهد. برنامههاي SQL Server 2005 Notification
Services با استفاده از T-SQL و XML ايجاد ميشوند و با استفاده از .NET
Framework يكپارچهاي اجرا
ميشوند كه در SQL
Server 2005 ساخته شده است. نگارشهاي
32 و 64 بيتي محيط Notification Services وجود دارند. ميتوانيد مروري بر معماري SQL Server 2005 Notification
Services را در شكل 2-5
ببينيد.

در بالاي شكل 2-5، ميتوانيد برنامه Notification
Services را ببينيد. اين
برنامه توسط برنامهنويس نوشته ميشود؛ وظيفه اصلي آن، افزودن اطلاعات اشتراك در
جدول Notification
Services Subscriptions
است. اين برنامه ميتواند يك برنامه وب ASP.NET،
يك برنامه ويندوزي Win32 استادارد يا هر نوع برنامهاي كه قادر به فراخواني APIهاي مديريت شده .NET است (بهطور
مستقيم يا از طريق كلاسهاي .NET
COM Interop)، باشد.
در سمت چپ شكل 2-5، ميتوانيد بخش
رويدادهاي معماري SQL
Server 2005 Notification Services
را ببينيد. رويدادها توسط تأمين كنندگان رويداد[4] به سيستم
اضافه ميشوند. اين تأمين كنندگان رويداد، منابع دستيابي خارجي را براي بررسي
تغييرات كنترل ميكنند. SQL Server 2005
همراه با دو تأمين كننده رويداد تعبيه شده است: يك ناظر سيستم فايل[5] كه تشخيص
تغييرات در فايلهاي سيستم عامل را ممكن ميسازد و تأمين كننده رويداد SQL Server كه يك پايگاه داده Analysis Services
يا SQL
Server را براي تغييرات
كنترل ميكند. Notification
Services همچنين ميتواند توسعه
يابد تا ساير منابع داده خارجي را از طريق كاربرد تأمين كنندگان رويداد اختصاصي
بررسي كنيد. هنگامي كه يك تأمين كننده رويداد با تغيير دادهاي مواجه ميشود، آن
رويداد را در جدول events پايگاه داده Notification Services ثبت ميكند.
مولد (يا موتور) Notification
Services كه در وسط شكل 2-5
نشان داده شده است، از منطق فراهم شده توسط برنامهنويس Notification
Services براي تطبيق
رويدادهاي ذخيره شده توسط تأمين كنندگان رويداد براي اشتراكهاي وارد شده توسط
كاربران نهايي برنامه استفاده ميكند. هنگامي كه رويدادي با يك اشتراك تطابق دارد،
مولد رديفي حاوي اطلاعات مشترك و رويداد را در جدول notifications پايگاه Notification Services
اضافه ميكند.
توزيع كننده[6] كه در سمت
راست پايين شكل 2-5 نشان داده شده است، جدول notifications را براي وروديهاي جديد كنترل ميكند. هنگامي كه مولد، ورودي
جديدي را به جدول notifications اضافه ميكند، توزيع كننده آن ورودي را بازيابي كرده و آن را براي
تحويل فرمت ميكند. بهطور پيشفرض، توزيع كننده، هشدار را با استفاده از XSLT فرمت خواهد كرد كه خروجي را به روشي نمايش ميدهد كه با وسيله
خروجي مشخص شده سازگار است. هنگامي كه هشدار فرمت شده باشد، آنگاه توزيع كننده آن
را براي تحويل به كاربر نهايي به تأمين كننده توزيع ارسال ميكند. SQL Server 2000 همراه با سه تأمين كننده توزيع تعبيه شده است: يك تأمين كننده SMTP، يك تأمين كننده فايل و يك تأمين كننده HTTP كه ميتواند براي SOAP،
.NET Alerts
و هشدارهاي SMS استفاده شود. همانگونه كه احتمالاً حدس زدهايد، تأمين كننده SMTP، هشدارها را از طريق يك سرور e-mail از قبيل Exchange
تحويل ميدهد. تأمين كننده فايل، هشدار را به شكل يك فايل سيستم عامل تحويل ميدهد.
تأمين كننده HTTP هشدار را به عنوان يك صفحه وب HTML يا با استفاده از يكي از پروتكلهاي مرتبط با HTTP ديگر تحويل ميدهد. علاوه بر اين موارد، همچنين ميتوانيد قابليتهاي
تحويل توزيع كننده را با افزودن يك تأمين كننده توزيع اختصاصي توسعه دهيد.
در اولين بخش اين فصل، مروري بر SQL Server 2005 Notification
Services جديد داشتيم. در
اين بخش، به بررسي عمقيتر خواهيم پرداخت، بنابراين مطالبي درباره مراحل واقعي
موجود در نوشتن برنامههاي SQL Server 2005 Notification Services ميآموزيد. ابتدا مروري بر فرآيند برنامهنويسي خواهيم داشت و سپس
يك برنامه Notification
Services بسيار ساده را ميسازيم.
فرآيند نوشتن برنامههاي Notification
Services با تعريف طرحواره
و قوانيني شروع ميشود كه نحوه كار برنامه را مشخص ميكنند. سپس، بايد برنامه را
كامپايل كنيد. سپس بايد رابطي بسازيد كه به كاربر اجازه افزودن اشتراكاتي را به
برنامه ميدهند. بالاخره، بايد اجزايي اختصاصي را اضافه كنيد كه شايد توسط برنامه
مورد نياز باشند. اجازه دهيد نگاهي به هر يك از اين مراحل بهطور مفصل داشته
باشيم.
تعريف
طرحواره و قوانين
برنامهنويس Notification
Services از تركيبي از XML و T-SQL براي تعريف قوانين و طرحواره برنامه استفاده ميكند. هنگامي كه
طرحواره و قوانيني را براي يك برنامه Notification Services تعريف ميكنيد، لزوماً رويدادهايي را كه برنامه كنترل خواهد كرد و
اشتراكهاي برنامه، هشدارهاي آن و منطقي كه براي تطابق رويدادها با اشتراكها
استفاده خواهد شد، توصيف ميكند. قوانين و طرحواره برنامه Notification
Services در اصل در دو فايل
تعريف ميشوند. Adf.xml و config.xml. ميتوانيد اين فايلها را با استفاده از يك ويراستار متني
استاندارد يا يك ويراستار مبتني بر XML
نظير Visual
Studio 2005 يا XMLSpy ايجاد كنيد. اطلاعات مفصلتر درباره محتويات خاص فايلهاي adf.xml و config.xml در ادامه فصل ارايه ميشود.
كامپايل
برنامه
بعد از ايجاد طرحواره و قوانين، مرحله
بعدي در ساخت يك برنامه Notification Services،
كامپايل تمام كد و رجيستر كردن سرويسي است كه برنامههاي Notification
Services را اجرا خواهد
كرد. براي كامپايل برنامه، SQL Server 2005
برنامه سودمند خط فرمان nscontrol
را فراهم كرده است كه براي ايجاد، رجيستر كردن و همچنين بهنگامرساني برنامه Notification
Services استفاده ميشود.
علاوه بر اين، SQL
Server Management Studio،
يك كادر محاورهاي را فراهم كرده است كه به شما امكان ايجاد محاورهاي برنامههاي Notification
Services را ميدهد.
ساخت
برنامههاي مديريتي اشتراك هشدار
دو مرحله اول، موتور اصلي برنامه Notification
Services را ميسازند.
هرچند، كاربران هنوز نياز به روشي براي افزودن اطلاعات اشتراك براي برنامه Notification
Services دارند. براي اين
كه به كاربران امكان وارد كردن اطلاعات اشتراكشان را بدهيد، برنامه Notification
Services نياز به يك رابط
مديريت اشتراك دارد كه معمولاً يك برنامه وب يا GUI است كه با استفاده از فناوريهاي ASP.NET، VB.NET در الحاق با يك محيط برنامهنويسي نظير Visual Studio 2005 ساخته ميشود.
افزودن
اجزاي اختصاصي
بالاخره، آخرين مرحله در ساخت برنامه Notification
Services، افزودن اختياري
هر جزء اختصاصي است كه ممكن است مورد نياز برنامه باشد. اجزاي اختصاصي شامل هر
تأمين كننده رويداد مورد نياز، فرمتهاي محتوا يا پروتكلهاي تحويل هشداري هستند كه
در محصول SQL
Server 2005 Notification Services
پايه نيستند.
برنامه Notification
Services نمونه كه در بخش
بعدي اين فصل ارايه ميشود، مقدار يك ستون را در يك جدول SQL Server كنترل ميكند. هنگامي كه مقدار آن ستون از آستانه خاصي تجاوز ميكند،
برنامه Notification
Services نمونه، يك هشدار e-mail را به كاربر نهايي ارسال خواهد كرد. اين مثال نگارش سادهاي از
مثال Stock است كه در برنامههاي نمونه SQL Server 2000 Notification
Services وجود داشت. براي
اين كه همه موارد كار كنند، اين برنامه با استفاده از تأمين كننده SQL Server 2005 براي بررسي يك جدول در پايگاه داده شروع ميكند. يك رويداد بايد
ايجاد شده و مقدار ستوني را در آن جدول بررسي كند، كاربر بايد اشتراكي را براي آن
رويداد وارد كند و يك قانون بايد اضافه شود تا به SQL Server اجازه دهد تا رويدادها را با اشتراكها تطبيق دهد. هنگامي كه
رويدادي با قانون رويدادي تطابق داشته باشد، تأمين كننده توزيع e-mail يك برنامه با فرمت XML
را به كاربر نهايي ارسال خواهد كرد. حال كه مروري بر برنامه Notification Services نمونه داشتيد، اجازه دهيد تا ساخت آن را ببينيم.
ايجاد
فايلهاي تعريف و پيكربندي برنامه
برنامههاي Notification
Services شامل دو فايل اصلي
هستند: يك فايل تعريف برنامه[7] (ADF) و يك فايل
پيكربندي برنامه[8]
(ACF)
كه هر دو فايل XML هستند و بايد برطبق طرحوارههاي xsd آنها ساخته شوند. طرحوارههاي XSD براي اطمينان از اين مسأله استفاده ميشوند كه هر دو سند مالك
عناصر و صفات مورد نياز هستند. فايل ACF
نام برنامه Notification Services و نام نمونه آن و مسير دايركتوري برنامه را تعريف ميكند. نام
نمونه لزوماً نام يك سرويس ويندوز است كه برنامه Notification
Services را اجرا ميكند.
فايل ADF فايل اصلي براي Notification Services است؛ بخشهاي متفاوت ADF،
رويداد، اشتراك، قوانين و ساختار هشدار را كه توسط برنامه Notification
Services به كار خواهند
رفت، توصيف ميكنند. براي SQL Server 2000،
بايد تمام كدنويسي XML را بهطور دستي براي ايجاد اين دو فايل انجام دهيد. اين امر همچنين
براي بتاهاي اوليه SQL
Server 2005 درست است. هرچند، SQL Server 2005 نهايي داراي ابزارهاي گرافيكي خواهد بود كه به شما امكان ايجاد
فايلهاي ACF و ADF را بدون كدنويسي دستي XML
در يك ويراستار متني ميدهد.
علاوه بر اين دو فايل اصلي كه ساختار و
برنامه Notification
Services را تعريف ميكنند،
يك برنامه Notification
Services نياز به يك برنامه
مديريت اشتراك دارد كه مسئول افزودن اطلاعات اشتراك براي پايگاه داده برنامه Notification
Services است. در حالي كه ADF و ACF در اصل با استفاده از XML
و T-SQL ساخته ميشوند، برنامه مديريت اشتراك معمولاً با استفاده از يك
زبان سطح بالا با يك رابط كاربر گرافيكي ساخته ميشود.
نكته: ساختار راهحل
چند پروژهاي Visual
Studio .NET به شما امكان گروهبندي
ساده فايلهاي تعريف برنامه XML
و كد مديريت اشتراك را به عنوان دو پروژهاي كه بخشي از يك راهحل مشترك هستند، ميدهد.
اين ليست فايل ACF (config.xml) را نشان ميدهد كه در برنامه Notification
Services نمونه اين فصل
استفاده شد:
<?xml version="1.0" encoding="utf-8"?><NotificationServicesInstance xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.microsoft.com/MicrosoftNotificationServices /ConfigurationFileSchema"> <InstanceName>NSSampleInstance</InstanceName> <SqlServerSystem>tecayukon</SqlServerSystem> <Applications> <Application> <ApplicationName>NSSample</ApplicationName> <BaseDirectoryPath>C:\NSSample</BaseDirectoryPath> <ApplicationDefinitionFilePath>ADF.xml </ApplicationDefinitionFilePath> </Application> </Applications> <DeliveryChannels> <DeliveryChannel> <DeliveryChannelName>EmailChannel </DeliveryChannelName> <ProtocolName>SMTP</ProtocolName> </DeliveryChannel> </DeliveryChannels></NotificationServicesInstance>
ميبينيد كه ACF يك سند نسبتاً ساده است. اين فايل ميتواند با استفاده از هر
ويراستار متني يا مبتني بر XML
ايجاد شود. مهمترين نكات توجه برانگيز تگهاي SqlServerSystem، InstanceName، ApplicationName، BaseDirectoryPath و ApplicationDefinitionFilePath هستند. همانگونه كه ممكن است حدس زده باشيد، تگ نام SqlServerSystem حاوي نام سيستمي SQL Serverاي است كه ميزبان
پايگاههاي داده Notification
Services خواهد بود، تگ InstanceName، نام نمونهاي را براي برنامه تعريف ميكند و تگ ApplicationName نام برنامه Notification Services را تعريف ميكند. BaseDirectoryPath
به كامپايلر محل يافتن فايل ADF
را ميگويد و تگ ApplicationDefinitionFilePath نام سند XML
حاوي كد ADF را مهيا ميسازد. علاوه بر اين آيتمهاي پايه، ACF همچنين از تگ DeliveryChannel
براي تعريف نحوه تحويل هشدارها استفاده ميكند. در اين مثال، تگ DeliveryChannel از پروتكل SMTP
براي تحويل هشدارهاي e-mail
استفاده ميكند.
تعريف
طرحواره رويداد ADF
تعاريف اصلي كه كنترل ميكنند چگونه يك
برنامه Notification
Services كار ميكند، در ADF قرار دارند. اولين كاري كه بايد براي ساخت برنامه نمونه انجام
دهيد، ساخت طرحوارهاي براي رويدادهاست. در فايل ADF، عنصر EventClasses
حاوي كد XML مورد استفاده براي تعريف رويدادهاي Notification
Services است. عنصر EventClasses ميتواند حاوي چندين تعريف رويداد باشد. هر تعريف رويداد در يك
زيرعنصر EventClass مجزا توصيف ميشود. قطعه كد زير از فايل adf.xml مثال، كد XML
مورد استفاده براي ايجاد نمونه را تشريح ميكند:
<?xml version="1.0" encoding="utf-8" ?><Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.microsoft.com/MicrosoftNotificationServices/ ApplicationDefinitionFileSchema"> <!-- Describe the Events --> <EventClasses> <EventClass> <EventClassName>DataEvents</EventClassName> <Schema> <Field> <FieldName>DataID</FieldName> <FieldType>int</FieldType> <FieldTypeMods>not null</FieldTypeMods> </Field> <Field> <FieldName>DataValue</FieldName> <FieldType>int</FieldType> <FieldTypeMods>null</FieldTypeMods> </Field> </Schema> <IndexSqlSchema> <SqlStatement>CREATE INDEX DataEventsIndex ON DataEvents ( DataID )</SqlStatement> </IndexSqlSchema> <Chronicles> <Chronicle> <ChronicleName>DataEventsTable</ChronicleName> <SqlSchema> <SqlStatement> IF EXISTS(SELECT name FROM dbo.sysobjects WHERE name = 'DataEventsTable') DROP TABLE dbo.DataEventsTable CREATE TABLE DataEventsTable ( [DataID] int, [DataValue] int ) </SqlStatement> </SqlSchema> </Chronicle> </Chronicles> </EventClass> </EventClasses>
تمام فايلهاي ADF بايد با عناصر برنامه شروع شوند كه همانگونه كه ممكن است حدس زده
باشيد، برنامه Notification
Services را ارايه ميدهند.
عناصر اصلي در عنصر برنامهاي كه برنامه را تعريف ميكند، عناصر EventClasses، SubscriptionClasses و NotificationClasses هستند. ليست كد قبل حاوي بخش EventClasses از ADF
است. به دليل اين كه اين برنامه نمونه تنها از يك رويداد استفاده ميكند، عنصر EventClasses تنها حاوي يك عنصر EventClass
به نام DataEvents است. بخش طرحواره رويداد را تعريف ميكند كه برنامه Notification
Services كنترل خواهد كرد.
در اين مورد، دو ستون تعريف ميشوند: ستون DataID
كه يك شناسه ساده است و ستون DataValue
كه حاوي يك مقدار مرتبط است. شباهت اين دو تعريف براي ستونهاي SQL Server، تصادفي نيست. Notification Services از اين تعاريف براي ايجاد ستونها در پايگاه داده Notification
Services استفاده ميكند.
براي اطمينان از كارآيي خوب، تگ IndexSqlSchema
براي ايجاد ايندكسي روي ستون DataID
به كار ميرود.
بخش Chronicles جداولي را تعريف ميكند كه داده رويداد را براي استفاده از اشتراكهاي
زمانبندي شده ذخيره ميكند. بخش Chronicles
داراي دو تگ مورد نياز است: تگ ChronicleName
و تگ SqlSchema. تگ ChronicleName
نام جدول Chronicle را مهيا ميكند و تگ SqlSchema
حاوي عبارات T-SQL است كه جدول را ايجاد ميكنند. به دليل اين كه اين كد در طي ايجاد
Notification
Services و بهنگامرساني
فرآيندها استفاده ميشود، ابتدا بايد وجود جدول را بررسي كند و چنانچه آن را يافت،
آن را حذف كند. سپس خط بعدي T-SQL،
جدول را ايجاد ميكند.
تعريف
تأمينكنندههاي ADF
بعد از تعريف رويدادهايي كه برنامه را
كنترل خواهند كرد، مرحله بعدي در ايجاد برنامه Notification
Services، تعريف تأمين
كنندهاي است كه اين رويدادها را به برنامه تحويل خواهد داد. در اين قطعه كد از
بخش بعدي فايل adf.xml، ميتوانيد تعريفي براي تأمين كننده رويداد SQL Server مورد استفاده براي اتصال برنامه Notification
Services به SQL Server ببينيد:
<!-- Specify the SQL Server Event Provider --><Providers> <HostedProvider> <ProviderName>SQLData</ProviderName> <ClassName>SQLProvider</ClassName> <SystemName>tecayukon</SystemName> <Schedule> <Interval>P0DT00H00M60S</Interval> </Schedule> <Arguments> <Argument> <Name>EventsQuery</Name> <Value>SELECT DataID, DataValue FROM DataEventsTable</Value> </Argument> <Argument> <Name>EventClassName</Name> <Value>DataEvents</Value> </Argument> </Arguments> </HostedProvider></Providers>
بخش Providers از ADF
تأمين كنندههاي رويداد مورد استفاده برنامه Notification
Services را توصيف ميكند. در
اين مثال، عنصر HostedProvider تأمين كننده رويداد SQL Server
را تعريف ميكند. عنصر ProviderName
براي انتساب نامي به تأمين كننده استفاده ميشود و عنصر SystemName نام سيستم SQL Server
اي را كه تأمين كننده به آن متصل خواهد شد، مهيا ميكند.
عنصر Schedule تعريف ميكند كه تأمين كننده چند وقت به چند وقت به سيستم متصل
خواهد شد؛ اين فاصله زماني با مقدار تعريف شده در عنصر Interval كنترل ميشود. مقدار موجود در عنصر Interval از نوع داده مدت زماني XML
استفاده ميكند. بخش 0DT اين مقدار، يك فاصله زماني تاريخي را با يك مقدار 0 نشان ميدهد. بخش 00HR يك فاصله زماني
ساعتي را با مقدار 0 نشان ميدهد. بخش 00M يك فاصله زماني دقيقهاي را با مقدار 0 نشان ميدهد. بخش 60S يك فاصله زماني ثانيهاي را با مقدار 60 نشان ميدهد. به عبارت ديگر، اين فاصله زماني با 60 ثانيه تنظيم ميشود.
عنصر Arguments پرسوجويي را مهيا ميكند كه براي اقتباس داده از منبع رويداد
استفاده خواهد شد. در اين مثال، محتويات ستون DataID and DataValue در DataEventsTable
هر 60 ثانيه براي كلاس رويداد به نام DataEvents
كه در عنصر EventClass قبلي تعريف شده بود، بازيابي خواهد شد.
تعريف
طرحواره اشتراك ADF
هنگامي كه رويدادها توصيف شدند، مرحله
بعدي در ايجاد فايل ADF،
تعريف اشتراكهاست. اين ليست كد، بخش بعدي فايل adf.xml را نشان ميدهد كه اشتراكهاي مورد استفاده برنامه Notification
Services نمونه را نشان ميدهد:
<!-- Describe the Subscription --><SubscriptionClasses> <SubscriptionClass> <SubscriptionClassName>DataSubs</SubscriptionClassName> <Schema> <Field> <FieldName>DeviceName</FieldName> <FieldType>nvarchar(255)</FieldType> <FieldTypeMods>not null</FieldTypeMods> </Field> <Field> <FieldName>SubLocale</FieldName> <FieldType>nvarchar(10)</FieldType> <FieldTypeMods>not null</FieldTypeMods> </Field> <Field> <FieldName>DataID</FieldName> <FieldType>int</FieldType> <FieldTypeMods>not null</FieldTypeMods> </Field> <Field> <FieldName>DataTriggerValue</FieldName> <FieldType>int</FieldType> <FieldTypeMods>not null</FieldTypeMods> </Field> </Schema> <IndexSqlSchema> <SqlStatement>CREATE INDEX DataSubIndex ON DataSubs ( DataID )</SqlStatement> </IndexSqlSchema> <EventRules> <EventRule> <RuleName>DataSubEventRule</RuleName> <Action> SELECT dbo.DataNotificationsNotify (s.DeviceName, s.SubLocale, e.DataID, e.DataValue) FROM DataSubs s JOIN DataEvents e ON s.DataID = e.DataID LEFT OUTER JOIN DataEventsTable t ON s.DataID = t.DataID WHERE s.DataTriggerValue <= e.DataValue AND (s.DataTriggerValue > t.DataValue OR .DataValue IS NULL) INSERT INTO DataEventsTable (DataID, DataValue) SELECT e.DataID, e.DataValue FROM DataEvents e WHERE e.DataID NOT IN (SELECT DataID from DataEventsTable) UPDATE DataEventsTable SET DataValue = e.DataValue FROM DataEvents e, DataEventsTable t WHERE e.DataID = t.DataID AND e.DataValue > t.DataValue </Action> <EventClassName>DataEvents</EventClassName> </EventRule> </EventRules> </SubscriptionClass></SubscriptionClasses>
بخش SubscriptionClasses سند ADF
شبيه EventClasses ميتواند چندين اشتراك را توصيف كند كه هر اشتراك در يك عنصر SubscriptionClass مجزا توصيف ميشود. اين مثال از يك SubscriptionClass به نام DataSubs
استفاده ميكند. بخش Schema
اشتراك را توصيف ميكند. فيلد DeviceName
نوع وسيله مقصد را نشان ميدهد. SubLocale
براي تغيير اختياري زباني كه مشترك براي بازيابي هشدار به كار خواهد برد، استفاده
ميشود. فيلدهاي DataID و DataTriggerValue رويدادي را مشخص خواهند كرد كه مشترك آن خواهند شد و مقدار دادهاي
كه يك هشدار را تريگر خواهد كرد. باز هم عنصر IndexSqlSchema شبيه EventClass
براي ايجاد ايندكسي روي ستون DataID
براي كارآيي بهتر استفاده ميشود. Notification Services از اين توضيحات براي ايجاد ستونهاي پايگاه داده در SQL Server استفاده ميكند. بعد از تنظيم اشتراكها، بخش بعدي كد در عنصر EventRules منطقي را تعريف ميكند كه برنامه Notification
Services براي تطابق
رويدادها با اشتراكها به كار خواهد برد. در حالي كه اطلاعات Event و Subscription با استفاده از XML
تعريف ميشوند، قوانين رويداد با استفاده از كد T-SQL ايجاد ميگردند كه در عنصر EventRulesAction ذخيره ميشوند. در اين مثال، مهمترين نكته قابل توجه اين است كه
جدول DataSubs با جدول DataEvents
تلفيق ميشود كه DataValue از جدول DataEvents
بزرگتر از DataTriggerValue است ولي كوچكتر از مقدار جديد است. هنگامي كه شرط
تلفيق برآورده ميشود، رديفي براي مشترك ايجاد خواهد شد. عبارات INSERT و UPDATE براي بهنگامرساني جدول Chronicle
هنگام پيدا نشدن يك مقدار يا هنگامي كه مقدار بزرگتر از مقدار Chronicle موجود باشد، استفاده ميشود.
طرحواره
هشدار ADF
بخش بعدي تعريف فايل ADF، تنظيم طرحواره NotificationClasses است. NotificationClasses
نحوه تحويل اطلاعات هشداردهي را توصيف ميكند. اين ليست كد بخش آخر فايل adf.xml است كه حاوي تعريف NotificationClass
است. عنصر NotificationClasses ميتواند چندين نوع هشداردهي را توصيف كند كه هر نوع در عنصر NotificationClass خاص خود توصيف ميشود. به دليل اين كه اين برنامه نمونه تنها از
يك نوع هشداردهي استفاده ميكند، بخش NotificationClasses حاوي يك عنصر NotificationClass
است.
<!-- Describes the Notifications --><NotificationClasses> <NotificationClass> <NotificationClassName>DataNotifications</NotificationClassName> <Schema> <Fields> <Field> <FieldName>DataID</FieldName> <FieldType>int</FieldType> </Field> <Field> <FieldName>DataValue</FieldName> <FieldType>int</FieldType> </Field> </Fields> </Schema> <!-- Specify the Content Format XSLT --> <ContentFormatter> <ClassName>XsltFormatter</ClassName> <Arguments> <Argument> <Name>XsltBaseDirectoryPath</Name> <Value>C:\NSSample</Value> </Argument> <Argument> <Name>XsltFileName</Name> <Value>NSSample.xslt</Value> </Argument> </Arguments> </ContentFormatter> </NotificationClass></NotificationClasses><Generator> <SystemName>tecayukon</SystemName></Generator><Distributors> <Distributor> <SystemName>tecayukon</SystemName> </Distributor></Distributors><ApplicationExecutionSettings> <PerformanceQueryInterval>PT5S</PerformanceQueryInterval></ApplicationExecutionSettings> </Application>
در اين ليست، ميتوانيد ببينيد كه كلاس
هشداردهي DataNotifications ناميده ميشود. عنصر Schema
كلاسهاي DataNotification اطلاعاتي را تعريف ميكند كه به مشترك ارسال خواهد شد. در اينجا
ميتوانيد ببينيد كه مقدار فيلدهاي DataID
و DataValue به عنوان بخشي از هشداردهي ارسال خواهند شد.
عنصر ContentFormatter نحوه فرمتبندي هشداردهي را هنگام ارسال به مشترك تعريف ميكند.
اين مثال كاربرد XSLFormatter را تشريح ميكند. عنصر Arguments
دايركتوري محل فايل XSLT
و نام فايل را توصيف ميكند. در اين ليست، ميتوانيد ببينيد كه فايل XSLT در دايركتوري C:\NSSample
قرار دارد و NSSample.xslt ناميده ميشود.
عناصر Generator، Distributor و ApplicationExecutionSettings سيستم SQL Serverاي كه براي توليد هشدارها استفاده خواهد
شد، سيستمي كه براي توزيع هشدارها استفاده خواهد شد و فاصله زماني را كه در آن،
شمارندههاي كارآيي سيستم بهنگام خواهند شد، مشخص ميكنند.
فرمتبندي
خروجي هشداردهي
در ليست قبل، گفتيم كه هشداردهي با
استفاده از شيوهنامه NSSample.xslt
فرمتبندي ميشود. ميتوانيد در ليست زير ببينيد كه اين شيوهنامه نمونه چه شكلي
است:
<?xml version="1.0" encoding="UTF-8" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="notifications"> <HTML> <BODY> <xsl:apply-templates /> <I>This message was generated using <BR/>Microsoft SQL Server Notification Services</I><BR/><BR/> </BODY> </HTML> </xsl:template> <xsl:template match="notification"> <P>The data value of <B><xsl:value-of select="DataID"/></B> <BR/>reached the value <B><xsl:value-of select="DataValue"/></B> </P> </xsl:template></xsl:stylesheet>
شيوهنامه مورد استفاده براي فرمتبندي
خروجي برنامه Notification
Services، يك شيوهنامه HTML استاندارد است. در بخش قالب، ميتوانيد ببينيد كجا فيلدهاي DataID و DataValue از NotificationClass
در هشداردهي نمايش داده ميشود.
ايجاد
برنامه Notification
Services
بعد از ايجاد كد برنامه T-SQL و XML مورد نياز، آماده ساخت برنامه Notification
Services هستيد. برنامههاي
Notification
Services ميتوانند به صورت
محاورهاي با استفاده از SQL Server Management Studio
ايجاد شوند يا ميتوانند با استفاده از برنامه سودمند nscontrol ايجاد گردند.
ايجاد
برنامههاي Notification
Services با استفاده از SQL Server Management
Studio
بعد از اين كه فايلهاي config.xml و adf.xml كه Notification Services
را تعريف ميكنند، ايجاد شدند، ميتوانيد از آنها براي ساخت برنامه Notification
Services خود از SQL Server Management
Studio با باز كردن Object Browser و كليك راست روي گره Notification Services استفاده كنيد. سپس، ميتوانيد گزينه New Notification
Services Instance از منوي زمينه را
براي نمايش صفحهاي شبيه شكل 3-5 انتخاب كنيد.

براي ايجاد يك برنامه NotificationClasses جديد با استفاده از كادر محاورهاي New Notification
Services Instance، روي Browse كليك كرده و به دايركتوري حاوي فايل config.xml برنامه خود برويد. سپس، فايل config.xml را انتخاب كرده و OK
را كليك كنيد. اگر بخواهيد برنامه بلافاصله بعد از ايجاد فعال شود، بايد كادر
انتخاب Enable
Instance After It Is Created
را در حالت تأييد قرار دهيد.
ايجاد
برنامههاي Notification
Services با استفاده از Nscontrol
Nscontrol
يك ابزار خط فرمان است كه براي ايجاد و راهبري برنامههاي Notification
Services استفاده ميشود. Nscontrol تعداد فرامين عمل مختلفي را كه ميتوانيد براي كار كردن با برنامههاي
Notification
Services استفاده كنيد، ميداند.
جدول 1-5 فرامين عمل nscontrol
موجود را فهرست كرده است.
|
فرمان
Nscontrol |
شرح |
|
nscontrol create |
يك
برنامه Notification
Services و پايگاههاي
داده آن را ايجاد ميكند. |
|
nscontrol delete |
يك
برنامه Notification
Services و پايگاههاي
داده آن را حذف ميكند. |
|
nscontrol disable |
يك
برنامه Notification
Services را غيرفعال ميكند. |
|
nscontrol
displayargumentkey |
كليد
مورد استفاده براي رمزگذاري داده رويداد را نمايش ميدهد. |
|
nscontrol enable |
برنامه
Notification
Services را فعال ميكند. |
|
nscontrol listversions |
نگارش
Notification
Services و هر يك از
برنامههاي رجيستر شده را نمايش ميدهد. |
|
nscontrol register |
يك
برنامه Notification
Services را رجيستر ميكند. |
|
nscontrol status |
وضعيت
يك برنامه Notification
Services را نمايش ميدهد. |
|
nscontrol unregister |
يك
برنامه Notification
Services را از حالت
رجيستر شده بر ميدارد. |
|
nscontrol update |
يك
برنامه Notification
Services را بهنگام ميكند. |
ايجاد يك برنامه Notification
Services يك فرآيند چند
مرحلهاي است. ابتدا، برنامه نياز به ايجاد با استفاده از فرمان nscontrol create دارد. اين امر پايگاه داده مورد استفاده برنامه Notification
Services را ايجاد ميكند.
سپس، برنامه بايد با استفاده از فرمان nscontrol register
رجيستر شود. اين امر سرويسي را ايجاد ميكند كه براي اجراي برنامه استفاده ميشود.
فايل دستهاي زير، توالي فرمان مورد نياز براي ايجاد برنامه NSSample Notification
Services نمونه را تشريح ميكند:
echo offclsset NSdir="C:\Program Files\Microsoft SQL Server\90\NotificationServices\9.0.242\bin"echo ========================================echo Beginning NSSampleInstance Creationecho ========================================echo .echo Create the application databases%NSdir%\nscontrol create -in config.xml echo Register the application%NSdir%\nscontrol register -name NSSampleInstance –service echo Enable the application%NSdir%\nscontrol enable -name NSSampleInstance echo start the NS app as a servicenet start NS$NSSampleInstance echo Display the status of the app%NSdir%\nscontrol status -name NSSampleInstance
آرگومان –n فرمان nscontrol create،
نام Notification
Services ACF را مشخص ميكند.
در اين مثال، ACF، config.xml ناميده ميشود. اجراي فرمان nscontrol create باعث ايجاد دو پايگاه داده در سرور ميشود: NSSampleInstanceMain و NSSampleInstanceNSSample كه رويدادهاي داده و تعريف برنامه Notification
Services را ذخيره ميكنند.
فرمان nscontrol register از آرگومان –name براي تعيين نام نمونه برنامه Notification
Services براي رجيستر شدن
استفاده ميكند. سوييچ –service آن را براي رجيستر كردن سرويسي به نام NS$NSSampleInstance هدايت ميكند. فرمان nscontrol enable
از پارامتر –name براي تعيين نام نمونه برنامهاي كه فعال خواهد شد، استفاده ميكند.
هنگامي كه برنامه فعال ميشود، سرويس آن
ميتواند با استفاده از فرمان net start
اجرا شود. براي امتحان، همچنين ميتوانيد برنامه NS$NSSampleInstance از اعلان فرمان يا كادر محاورهاي Run استفاده كنيد.
افزودن
مشتركين برنامه
مشتركين با استفاده از APIهاي كد مديريت شدهاي
كه مايكروسافت در SQL
Server 2005 Notification
Services فراهم كرده است،
به برنامههاي Notification
Services اضافه ميشوند. APIهاي Microsoft .NET
Framework به شما امكان
اضافه كردن، بهنگامرساني و حذف مشتركين و وسايل و اشتراكهاي مشتركين را ميدهد.
در حالي كه Notification
Services API از طريق كلاسهاي
كد مديريت شده فراهم شده است، همچنين ميتوانيد با استفاده از برنامههاي COM مبتني بر Win32
از كد مديريت نشده به آن API
دستيابي داشته باشيد.
Notification Services API در Microsoft.SqlServer.NotificationServices.dll قرار دارد و بايد به عنوان يك مرجع به پروژه .NET اضافه شود. سپس،
ميتوانيد از كلاسهاي Notification Services
براي مديريت اشتراكها براي برنامههاي Notification Services خود استفاده كنيد. اين نمونه كد، نحوه افزودن يك اشتراك را با
استفاده از API كد مديريت شده نشان ميدهد:
using Microsoft.SqlServer.NotificationServices;using System.Text; public class NSSubscriptions{ private string AddSubscription(string instanceName, string applicationName, string subscriptionClassName, string subscriberId) { // Create the Instance object NSInstance myNSInstance = new NSInstance(instanceName); // Create the Application object NSApplication myNSApplication = new NSApplication (myNSInstance, applicationName); // Create the Subscription object Subscription myNSSubscription = new Subscription (myNSApplication, subscriptionClassName); myNSSubscription.Enabled = true; myNSSubscription.SubscriberId = subscriberId; // Set the subscription data fields myNSSubscription["DeviceName"] = "MyDevice"; myNSSubscription["SubscriberLocale"] = "USA"; myNSSubscription["DataID"] = 1; myNSSubscription["DataTriggerValue"] = 100; // Add the subscription string subscriptionId = myNSSubscription.Add(); return subscriptionId; }}
در بالاي اين ليست، ميتوانيد يك رهنمود import را براي فضاي نام Microsoft.SqlServer.NotificationServices ببينيد. استفاده از رهنمود import به شما امكان استفاده از كلاسها را در فضاي نام NotificationServices بدون نياز به تعيين كامل اسامي ميدهد. سپس، در
داخل متد AddSubscriptions، ميتوانيد كدي را ببينيد كه اشتراكي را اضافه ميكند. ابتدا يك
شئ نمونه Notification
Services ايجاد شده و بعد
از آن شئ Application ميآيد. سپس، شئ Application
براي ايجاد يك شئ اشتراك به نام myNSSubscriptions
استفاده ميشود. مقاديري به خصوصيات شئ Subscription
نسبت داده شده و سپس متد Add
آن براي افزودن اشتراكي به پايگاه داده فراخواني ميشود.