پياده سا زي نرم افزار تحت وب داراي سا بقه اي چندين سا له بوده و تا کنون دستخوش تحولات متعددي گرديده است . تما مي تحولات بوجود آمده ، ريشه در سير صعودي نيا زها ومطرح شدن انتظا رات جديد از اينترنت و مهمترين سرويس آن يعني وب دارد. اگر سال 1996 ميلادي را نقطه عطفي در زمينه طراحي و پيا ده سازي نرم افزارهاي تحت وب بدانيم ، قطعا" مي بايست به نقش تکنولوژي هاي متفا وت که امکا ن خلق آثار نرم افزاري بر روي بستر وب را فراهم نموده اند ، مرور مجددي داشت .
تکنولوژي ASP يکي از پيشکسوتا ن در اين زمينه مي با شد. با عرضه تکنولوژي فوق و استقبا ل برنامه نويسان بيشماري در سطح دنيا، ASP بسرعت جايگا ه و مکاني رفيع را پيدا نمود. تکنولوژي فوق ، طي ساليان متما دي توانست به خيل عظيم نيازها بدرستي و بخوبي پاسخ دهد. ASP آن روز، که امروزه با نام ASP کلاسيک از آن يا د مي گردد ، گرچه کا مل ترين تکنولوژي در زمينه آفرينش آثا ر نرم افزار تحت وب نيست ، ولي قطعا" يکي از بهترين گزينه ها در اين زمينه مي با شد. . ماحصل تما مي تلاش هاي انجام گرفته شده طي سا ليان قبل ، انقلابي عظيم در زمينه بکارگيري نرم افزار هاي تحت وب از زاويه استفاده کننده بود. با توجه به رشد تصاعدي خواسته ها و مطرح شدن نوع خاصي از انتظارات ، نياز به يک تکنولوژي قدرتمند تر بهمراه زير ساخت ها و چارچوپ هاي مناسب ، طي ساليان اخير بشدت احساس مي گرديد. بر همين اساس شرکت ما کروسافت پروژه معروف دات نت را مطرح نمود. يکي از اهداف اساسي و مهم در پروژه فوق ، ارائه يک مدل و ساختا ر جديد برنامه نويسي تحت وب است . مدل فوق ، بستر مناسب براي گفتما ن برنامه ها بر روي بستر وب را ايجاد خواهد کرد ، چيزي که از آن بعنوان انقلابي ديگر در عرصه برنامه نويسي تحت وب نام برده مي شود. در اين مقاله قصد پرداختن به شاخص ها ، ويژگي ها و شا ه کليدهاي مطرح در دات نت را نداريم . هدف پرداختن به مواردي است که از منظر برنامه نويسان ASP حائز اهميت است . عرضه و معرفي ASP.NET بهمراه برخي ديگر از تکنولوژي ها در دات نت، کا نون توجه برنامه نويسان ASP قرار گرفته است . تمامي برنامه نويسا ن وب که تا کنون بکمک ASP آثا ر خود را خلق مي کردند ، با نگا هي عميق و کنجکا وانه بدنبال ASP.NET هستند. برنامه نويسان، در مرحله اول تما يل دارند که با دستا وردها و امکا نات ASP.NET آشنا شده و قادر به استفاده از پتانسيل هاي ارائه شده در کوتا هترين زمان ممکن و با روشي کاملا" علمي باشند. در مرحله دوم مي بايست تکليف ميليون ها صفحاتي را که توسط ASP کلاسيک ايجاد شده و تاکنون نيز به ارائه خدمات و مسئوليت هاي محوله ادامه مي دهند ، روشن گردد.
در اين مقاله سعي خواهد شد که با ارائه يک مدل علمي و عملياتي ، منا سبترين روش ها بمنظور گذر از ASP کلاسيک و رسيدن به ASP.NET ، ارائه و بررسي گردد. با مطالعه مقاله فوق از يکسو با برخي امکانات و ويژگي هاي ASP.NET آشنا شده و از سوي ديگر نحوه گذر از ASP کلاسيک و پرداختن به ASP.NET نيز تبين خواهد شد.
اهم مطالبي که در اين مقاله به آنها پرداخته خواهد شد بشرح ذيل مي باشند:
• ضرورت هاي حرکت به سمت ASP.NET . در ابتدا به اين پرسش مهم پاسخ داده خواهد شد که چرا مي بايست بسمت دانت نت حرکت نمود؟
• معرفي اوليه ASP.NET . در اين بخش به تشريح برخي از ويژگي هاي مهم دانت نت اشا ره خواهد شد .
• تغييرات کليدي و اساسي بين ASP و ASP.NET. در اين بخش به بررسي برخي از تفاوت هاي مهم موجود بين دو تکنولوژي فوق اشا ره خواهد شد.
• نحوه حرکت از ASP بسمت ASP.NET . در اين بخش نحوه تبديل برنامه هاي نوشته شده ASP توسط VBScript تشريح مي گردد .
• نحوه حرکت نرم افزارهائي که از عناصر COM استفاده مي نمايند. در اين بخش نحوه تبديل و استفاده از عناصر Com بهمراه ASP.NET تشريح خواهد شد.
• نحوه حرکت نرم افزارهائي که از بانک هاي اطلاعاتي استفاده مي نمايند. در اين بخش نحوه تبديل و استفاده از با نک هاي اطلاعاتي در ASP.NET تشريح خواهد شد.
• نحوه حرکت بصورت عملي . نحوه عملي ترکيب کدهاي نوشته شده ASP کلاسيک وASP.NET تشريح خواهد شد.
• پاسخ به برخي سوالات متداول در خصوص سازگاري بين ASP و ASP.NET
ضرورت هاي حرکت به سمت ASP.NET
بمنظور پا سخ به سوال فوق در ابتدا مي بايست مشخص نمود که تکتولوژي فوق چه خدمات و امکاناتي را ارائه مي دهد :
? افزايش قا بليت هاي توسعه و اعتماد . .با استفاده از دات نت قابليت اعتما د و توسعه به شدت افزايش خواهد يافت .امروزه استفاده از تکنولوژي فوق در مزارع وب و باغ هاي وب ضرورت داشته و اين نوع برنامه ها مي بايست همه روز و بصورت شبانه روزي خدمات خود را بصورت بهنگا م ارائه نمايند.
? افزايش حداقل دو تا سه برابر کارائي . با استفاده از تکنولوژي دات نت و صرفا" با تبديل برنا مه هاي نوشته شده با ASP به دات نت کارائي برنامه ها به ميزان دو تا سه برابر افزايش خواهد يافت
? داراي ماهيتي کاملا" سازگار با مرورگرها . دات نت کاملا" سازگار با انواع مرورگرها بوده و ضرورتي به نوشتن کدهاي اختصاصي بمنظور مشاهده در يک مرورگر خاص وجود نخواهد داشت .
? داراي کنترل هاي سرويس دهنده مورد حمايت ويژوال دات نت و امکانات مربوط به پيکربندي . ASP.NET داراي مجموعه اي وسيع از کنترل هاي سرويس دهنده مي باشد که با توجه به حما يت ويژوال دات نت از تکنولوژي فوق ، زمينه بکارگيري آسان آنها فراهم خواهد شد. در ضمن دات نت داراي امکا نا ت گسترده در زمينه پيکربندي اتوما تيک نيز مي باشد.
? بکارگيري آسان کدها . صفحا ت و عنا صر طراحي شده بکا رگيري صفحات و حتي عناصر را تسهيل خواهد بخشيد . نظير دستور معروف کپي
تغييرات عمده در ASP.NET
يکي از اهداف اوليه و مهم ASP.NET سازگاري کامل آن با ASP کلاسيک است . دستيابي به هدف فوق بصورت کامل و در مرحله عمل غير ممکن بنظر مي آيد . زمانيکه اين محصول ارائه گرديد ، صرفا" يک تفاوت اساسي مربوط به يکي از اشياء مهم ( شي Request) ، در آن مشهود بود . در ASP کلاسيک ، Querystring و مجموعه Form مربوط به شي Request ، برداري از نوع رشته را برمي گردانند . اما در ASP.NET آنها يک مجموعه شامل نام / مقدار را برمي گردانند. در اغلب حالات تعييرات اعمال شده بگونه اي بوده که از اشياء موجود استفاده و امکانات آنها افزايش يا بد .يکي ديگر از موارد قابل تامل ، احتياط در بکارگيري Response.write است . زمانيکه امکان فوق بهمراه تگ هاي Server-Side استفاده مي گردد، نتايج در بالاي صفحه و قبل از تگ HTML نمايش داده خواهند شد. بمنظور استفاده درست از امکان فوق و نمايش نتايج دلخواه در مکان مورد نظر، مي بايست Response.write از طريق تگ هاي Server-side و يا از طريق توابع مورد نظر ، فراخوانده گردد.در اين راستا مي توان از کنترل هاي سرويس دهنده نظير : Labels و يا PlaceHolder استفاده کرد . هر يک از اشياء اساسي نظير : Request , Response , Server, Session و ... داراي تعداد زيادي خصلت و متد جديد شده و در عين حال تعداد ديگر شي اضافه گرديده است .مثلا" شي Cashe باعث پياده سازي سيستم Cashe براي يک نرم افزار متکي بر وب مي گردد و يا شي ديگر، اطلاعات کاربري که در حال استفاده از برنامه است ، در خود نگهداري مي نمايد . و يا شي Trace که مي توان اطلاعات مربوط به رديابي را بکمک آن در خروجي نمايش داد، نمونه هائي از اشياء جديد مي با شند .
تغييرات ساختاري
در زمان کوچ از ASP کلاسيک بسمت ASP.NET ، مي بايست به تغييرات ساختاري بوجود آمده نيز دقت گردد. برخلاف صفحات ASP کلاسيک ، در ASP.NET در هر صفحه صرفا" مي توان از يک زبان استفاده کرد . ويژگي فوق يکي از مشهودترين تغييرات بوجود آمده در ساختار است . بنابراين نمي توان در يک صفحه چندين زبان را بخدمت گرفت . استثنا" مي توان از کنترل هاي کاربر که توسط يک زبان نوشته شده اند، در صفحاتي که با زبان ديگر نوشته شده اند ، استفاده کرد . قانون فوق صرفا" محدود به کدهاي نوشته شده اي است که مي بايست بر روي سرويس دهنده اجراء گردنند و استفاده از اسکريپت ها بر روي سرويس گيرنده نظير آنچيزي است که تاکنون استفاده شده است .
تغيير ديگر: يک صفحه aspx مي تواند داراي صرفا" يک تگ فرم Server-side بوده وپس از ارسال مي بايست به صفحه يکساني ارسال گردد. البته در اين راستا همچنان مي توان از تگ هاي Client-Side Form نيز استفاده نمود . در چنين وضعيتي مي توان آنها را براي ساير صفحات موجود ديگر نيز ارسال کرد .جدول زير امکا نا تي را که مي توان بهمراه صفحات aspx استفاده کرد ، نشان مي دهد .
مثال | امکانات |
<%@ Directive %> | يک صفحه ممکن است داراي دايرکتيو باشد.. دايرکتيوها شامل خصلت هاي خاصي براي صفحات ، نظير زبان مورد استفاده در صفحه و يا اسمبلي هائيکه مي بايست به صفحه Importگردنند، باشد . |
<tag runat=server> | از تگ هاي کنترلي Server-Sideنيز مي توان استفاده نمود. |
<script runat=server> | تعاريف کنترل شده وب ، که داراي خصلت Runat serverمي باشند. |
<%# %> | عبارات نسبت دهي داده . عبارات فوق امکان بازيابي داده را از منابع داده ئي تعريف شده فراهم مي نمايند. |
<%-- --%> | نظير اسکريپت هاي توضيحي Client-Sideمي توان از توضيحات Server-Sideاستفاده نمود. |
<!-- #include --> <%= %> , <% %> | مي توان از Server-Side Includesو render Blocksنيز استفاده نمود. |
<Script runat="server" language="vb"> dim gVar as String ?Page level variable private sub MySubRoutine() Label1.Text = gVar End Sub </Script > | تغييرات بوجود آمده در کدهاي بلاکي . در ASPکلاسيک محدوديتي از بعد محل و زمان تعريف موارد نظر وجود نداشت . اما در ASP.NETضوابطي بدين منظور وضع شده است . نمي توان توابع را درون تگ هاي <% %> تعريف نمود .بنابراين مي بايست مطمئن گرديد که تمامي توابع و متغيرهاي مورد نظر درون بلاک <SCRIPT> تعريف شده اند. |
تابع زير : <% MyRenderFunction Sub MyRenderFunction() %> <h1> Hi there! </h1> <%end sub%> بصورت زير نوشته مي گردد : <% Call MyRenderFunction()%> <script runat="server" language="vb"> Response.Write(?Hi there!?) </script> | اغلب برنامه نويسان از توابع خاصي با نام renderاستفاده مي نمايند. ويژگي مهم در اين زمينه ، امکان ايجاد کدهاي Server-Sideو تگ هاي Htmlبوجود آمده که با اولويت خاص خود اجراء خواهند گرديد. در مثال روبرو تابعي با نام MyRenderFunctionفراخوانده شده و بلافاصله تعريف شده است همانگونه که مشاهده مي گردد تگ هدر ، بعنوان بخشي از تابع محسوب مي گردد.بنابراين زمانيکه تابع فراخوانده مي شود تگ هدر مربوطه Renderخواهد شد.اين نوع نوشتن تابع و فراخواني در ASP.NETمجاز نبوده و مي بايست تمام کدهاي مربوطه درون بلاک <Script> قرار گيرند. |
<%@ Page Language="VB" ContentType="text/xml" %> | در ASPکلاسيک مي توان از دايرکتيوهائي بمنظور مشخص نمودن زبان ، وضعيت Session State ، کد پيج و ... استفاده کرد . در صفحات aspxمي توان از دايرکتيوهاي جديدي بمنظور مشخص نمودن خصلت ها براي صفحه ، کنترل ها اسمبلي ها و ... استفاده نمود. در ASPکلاسيک مي بايست دايرکتيوها را در ابتداي صفحه قرار داد .در ASP.NETمي توان دايرکتيوها را در هر محل که مورد نظر است و به هر تعداد که ضرورت وجود دارد ، استفاده کرد. مثال فوق دايرکتيوي را نشان مي دهد که زبان مورد نظر و نوع محتويات صفحه را مشخص مي نمايد. |
تغييرات اضافي در رابطه با پيکربندي
يکي از نکات قابل تامل ASP کلاسيک ، ذخيره سازي تمامي تنظيمات مربوط به پيکربندي در ريجستري و يا متابيس هاي IIS است . ويژگي فوق در زمان بکارگيري يک برنامه ، باعث بروز مشکلاتي مي گردد . در ASP.NET مدل فوق استفاده نشده و از مجموعه اي فايل هاي پيکربندي Xml استفاده مي گردد. تنظيمات مربوط به يک برنامه ASP.NET ، در فايل هاي پيکربندي خاصي از نوع Xml ذخيره مي گردنند. تمامي تنظيمات مربوطه با يک فرمت قابل خواندن در فايل هاي Xml ذخيره خواهند شد. دو نوع عمده از فايل هاي پيکربندي وجود دارد :
- فايل Machine.Config شامل تنظيمات عمومي و گسترده در رابطه با ماشين است . بنابراين در صورتيکه قصد اعمال تغييراتي را داشته باشيم که مي بايست بر روي تمامي برنامه هاي تحت وب تاثير گذار باشد ، مي توان از فايل فوق جهت نيل به خواسته هاي خود استفاده کرد .
- فايل Web.Config فايل فوق ، تمامي تنظيمات موجود در فايل Machine.Config را به ارث برده و در عين حال شامل ساير نتظيمات در رابطه با يک پروژه و درسطح برنامه است . مثلا" در صورتيکه بخواهيم مدل Session state را براي برنامه جاري مشخص و يا از برخي داده هاي خاص براي برنامه استفاده کرد ، مي توان از فايل فوق استفاده نمود. دات نت از طريق اينترفيس هاي مربوطه امکان دستيابي به اين نوع فايل ها را بسادگي فراهم مي نمايد.
تغييرات بوجود آمده در مديريت Session
در بخش قبل اشاره گرديد که مي توان تنظيمات مربوط به مديريت Session را در فايل web.Config ذخيره کرد . در ASP.NET چه امکانات جديدتري بمنظور مديريت Session ايجاد شده است ؟ در ASP کلاسيک صزفا" مي توانستيم از شي پيش فرض Session استفاده نمائيم حتي اگر آن را دوست نداشته باشيم ولي مجبور بوديم با آن زندگي نمائيم . در ASP.NET از مکانيزمهاي جديدي بمنظور مديريت Session استفاده مي گردد. در اين راستا مي توان از InProc Session استفاده ، که داراي عملکردي مشابه شي Session در ASP کلاسيک است . با اينکه امکان فوق گزينه مظلوبي بنظر مي آيد ولي همچنان مسئله Load-Balancing را برطرف نمي نمايد . در ASP کلاسيک همواره داراي مسائلي از بابت حصول اطمينان از بابت اتصال يک کاربر به سرويس دهندگان يکساني بمنظور پشتيباني از داده هاي مربوط به Session هستيم . در ASP.NET براي برطرف نمودن مسائلي اينچنين از StateServer استفاده مي گردد. در اين حالت داده مربوط به Session کاربر مورد نظر در يک State Service ذخيره و قابل اجراء بر روي هر ماشين است . بنابراين مي توان گفت که داده هاي Session متمرکز شده است . در صورتيکه StateServer با مشکل (Crashe) مواجه گردد تکليف چيست ؟ در اين حالت تمامي داده هاي Session از بين خواهند رفت . بمنظور حل مشکلاتي از اين نوع ، استفاده از SQLServer Session توصيه مي گردد. در اين حالت داده هاي مربوط به Session در SQL Server ذخيره و بصورت اتوماتيک براي شما مديريت خواهند شد. در صورتيکه علاقه مند به استفاده از Session State نباشيد ، مي توان آن را غير فعال نمود. در اين راستا مي توان حتي مکانيزمهاي تدوين شده توسط خود را نيز با آن جايگزين نمود. در صورتيکه قصد تغيير و پيکربندي session State را داشته باشيد ، مي توان نقطه نظرات خود را در بخش <SessionState> مربوط به فايل Web.Config نرم افزار مورد نظر ، اعمال کرد. در رابطه با بکارگيري و ذخيره اشياء در Session state موارد متعددي وجود دارد که مي بايست مورد توجه قرار گيرد. مثلا" مي توان عناصر COM را صرفا" زماني در اشياء Session state ذخيره نمود که از InProc استفاده شده است . ( عناصر فوق قابليت سريال سازي خود را ندارند) . در اين زمينه نيز مي توان عناصر مديريت يافته را در هر نوع مدلي از Session State ذخيره نمود مشروط به اينکه آنها اينترفيس ISerializable را پياده سازي نموده باشند.
تغييرات بوجود آمده از بعد امنيتي
يکي ديگر از تغييرات اساسي در ASP.NET نسبت به ASP کلاسيک مقوله امنيت است . از آنجائيکه ASP.NET مستقل از IIS است آن بخش از مسائل مرتبط با امنيت ، مشابه ASP کلاسيک است . ASP.NET يک مدل جديد و انعطاف پذير در رابطه با امنيت ارائه نموده که بر اساس تنظيمات تعريف شده در بخش هاي امنيتي (Security) فايل هاي پيکربندي مشخص شده است . در اين راستا امکانات و گزينه هاي متعددي بمنظور تشخيص هويت ( اعتبار سنجي ) در رابطه با برنامه تحت وب مبتني بر دات نت وجود دارد. مثلا" مي توان از روش هاي اعتبار سنجي حمايت شده توسط IIS استفاده و يا مي توان تصميم به استفاده از کدهاي جديد بمنظور اعتبار سنجي گرفت . عموما" از چهار مدل اعتبار سنجي استفاده مي گردد.اعتبار سنجي فوق بعد از اعتبار سنجي IIS صورت مي پذيرد .
- Windows Authentication . اعتبارسنجي ويندوز ، بعنوان پيش فرض در نظر گرفته خواهد شد. روش فوق زمانيکه از اعتبارستجي هاي IIS نظير : Digest,Certificates ، استفاده مي گردد ، توصيه شده است .
- Form Authentication اعتبارسنجي مبتني بر فرم ها را بعنوان اعتبار سنجي پيش فرض براي برنامه در نظر خواهد گرفت .
- Passport Authentication. اعتبار سنجي پاسپورت را بعنوان اعتبار سنجي پيش فرض براي برنامه در نظر خواهد گرفت .
- None صرفا" کاربران گمنام (Anonymouse) قادر به استفاده از برنامه خواهند بود. در اين راستا ممکن است عمليات اعتبارسنجي توسط برنامه ها اعمال گردد.
پس از اعتبار سنجي کاربر، مي بايست به کاربران مجوزهاي لازم جهت دستيابي از برنامه تحت وب داده شود. مجوزهاي مربوطه امکان کنترل دستيابي به منابع را فراهم خواهند نمود. در اين راستا از دو امکان File Authorization و URL Authorization مي توان استفاده بعمل آورد . مجوز فايل ، بصورت اتوماتيک اعمال خواهد شد. در صورتيکه کاربر متقاضي ، داراي حق دستيابي به يک فايل و يا منبع خاص را نداشته باشد، دستيابي به صورت خودکار انکار خواهد گرديد. مجوز مبتني بر URL امکان اعمال محدوديت به برنامه و يا آدرس هاي URL خاصي را فراهم مي نمايد.با استفاده از ويژگي فوق مي توان مجوز استفاده و يا عدم استفاده از يک برنامه به ازاي کاربران را تامين نمود.